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

时间:2012-08-29 02:08:38

标签: php file file-io fopen fgets

在PHP中读取文件的最快方法是什么?具体来说,我正在读一个网址,我正在使用fgets读取文件,网址的大小约为1MB,读取5个网址最多只需要20秒。我只得到一行字符串,它位于文件的末尾部分。我实际上使用fseek将指针移动到url的末尾,但它只适用于文件(不是url)。有什么好主意吗?

以下是我的示例代码

$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);

3 个答案:

答案 0 :(得分:2)

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

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

* 注意:如果资源支持部分内容和范围请求,您可以。不太可能。

答案 1 :(得分:1)

您可以使用支持简历下载的cUrl来仅检索文件的最后部分:

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);

直接获取内容。

答案 2 :(得分:0)

使用CURL获取远程网址:

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;
}