使用curl下载16 Mb网页并在标记

时间:2017-02-13 11:49:47

标签: php curl

我正在构建一个PHP应用程序,它对许多不同的URL执行curl请求。然后,它尝试解析curl返回的数据字符串,以提取<body> </body>标记中的所有内容。对99%的网址来说,这是绝对正常的。

但是,一个这样的URL是一个页面,在浏览器中加载需要一些时间。经过检查,我意识到该页面的标记是16 Mb。

我对curl的设置如下:

$ch = curl_init();
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$data = curl_exec($ch);
if (!$data) {
    echo 'ERROR: Curl has reported an error: ' . curl_error($ch) . "\n";
}
return $data;

我为!$data条件添加的错误消息未输出 - 所以我的假设是curl本身没有错误。我试图将CURLOPT_CONNECTTIMEOUT更改为120秒(而不是5秒),但这并不能解决问题。

$data返回我的脚本时:

if ($data) {
    $body = '';
    preg_match("/<body[^>]*>(.*?)<\/body>/is", $data, $body);

    if (empty($body)) {
        echo 'WARNING: nothing found in <body> tag: ' . "\n";
        var_dump($body);
    } else {
        // Writing to file occurs here...
        // This bit works ok when $body is available.
    }
 }

它向我显示警告信息&#34;警告:标签中找不到任何内容:&#34;并且var_dump($body)的输出是一个空数组:

array(0) {
}

有没有人知道如何进一步调试这个,因为我不确定错误源自何处?我手动保存了网页的副本,确实有一个起始和结束<body>标记,其中包含大量HTML。

我的假设是,由于文件大小,这是一个问题。 &#34;平均&#34;此应用程序的文件大小约为1 Mb,我的脚本与这些文件完美配合。

我在cli的服务器上运行它,即php download.php而不是浏览器。

0 个答案:

没有答案