1

在 PHP 中读取文件的最快方法是什么?具体来说,我正在读取一个 url,我正在使用 fgets 读取一个文件,该 url 的大小约为 1MB,读取 5 个 url 最多需要 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);
4

3 回答 3

2

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

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

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

于 2012-08-29T02:23:47.947 回答
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);

直接获取内容。

于 2012-08-29T02:53:35.647 回答
0

使用 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;
}
于 2012-08-29T02:26:49.393 回答