在PHP中读取文件的最快方法是什么?

问题描述:

在PHP中读取文件的最快方式是什么?具体来说,我正在阅读一个网址,我正在使用fgets阅读一个文件,网址的大小约为1MB,阅读5个网址最多只需要20秒。我只得到一行字符串,它位于文件的末尾。我实际上使用fseek将指针移动到url的末尾,但它只能在文件(不是url)上工作。任何精彩的想法?在PHP中读取文件的最快方法是什么?

我的继承人的示例代码

$fp=fopen("http://url.com", "r"); 
if(is_bool($fp)){ 
    exit; 
} 
while(!feof($fp)) { 
    $data = fgets($fp); 
    if($data=="this is what i've wanted") 
    { 
     // codes... 
    } 
} 
fclose($fp); 
+0

您可以尝试'file_get_contents'。不过,我不确定它会更快 –

在这种情况下,你不能只是*跳过所有内容。网络传输工作的方式是定义一个内容长度,并且必须在所需部分之前阅读所有内容。

总之,你不能跳过它。只要阅读它,抓住你需要的东西并继续生活。

* 注意:如果资源支持部分内容和范围请求,那么可以。不见得。

使用curl获得远程URL:

function curlRequest($url) 
{ 

    $curl = curl_init(); 
    curl_setopt($curl, CURLOPT_URL,    $url); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,  true); 
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION,  true); 
    curl_setopt($curl, CURLOPT_BINARYTRANSFER,  true); 
    curl_setopt($curl, CURLOPT_ENCODING,   true); 
    curl_setopt($curl, CURLOPT_HEADER,    false); 

    $a = new stdclass; 
    $a->body   = curl_exec   ($curl); 
    $a->status   = curl_getinfo  ($curl,  CURLINFO_HTTP_CODE); 
    $a->effectiveURL = curl_getinfo  ($curl,  CURLINFO_EFFECTIVE_URL); 

    curl_close ($curl); 

    return $a; 
} 

你可以使用卷曲,可支持恢复下载仅检索文件的最后部分:

function retrieve_tail($remoteFile, $localFile = null, $bytes = 1000) { 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RANGE, intval($bytes)."-"); 
    $fp = fopen($localFile, "w+"); 
    curl_setopt($ch, CURLOPT_FILE, $fp); 
    $result = curl_exec($ch); 
    curl_close($ch); 
    fclose($fp); 
    return $result; 
} 

然后调用:

$result = retrieve_tail("http://url.com", "local_copy.txt", 20000); 
    print_r($result); 

而且你会在你指定的本地文件上得到你想要的。此外,您可以设置

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

直接获取内容。