在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);
答
在这种情况下,你不能只是*跳过所有内容。网络传输工作的方式是定义一个内容长度,并且必须在所需部分之前阅读所有内容。
总之,你不能跳过它。只要阅读它,抓住你需要的东西并继续生活。
* 注意:如果资源支持部分内容和范围请求,那么可以。不见得。
答
使用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);
直接获取内容。
您可以尝试'file_get_contents'。不过,我不确定它会更快 –