首页 > 解决方案 > php脚本加载但没有到达文件末尾

问题描述

以下脚本似乎永远运行。它永远不会完成。

$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

for ($i = 500; $i<3000; i++){

    $url = "http://abcedfg.com/$i/index.html";

    curl_setopt($ch, CURLOPT_URL, $url);
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

标签: php

解决方案


尝试包装curl_initcurl_close在每个请求中。

像这样:

function callurl($myurl) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $myurl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_HEADER, true);
    $response = curl_exec ($ch);
    curl_close ($ch);
    return $response;
}

您必须为每个 URL 调用此函数,例如使用循环 for。

还可以尝试仅使用 10-20 个请求进行测试,然后再进行 BIG。考虑 2500 个请求,如果每个请求需要 1 秒,则转换为 41 分钟的活动。默认情况下,没有任何服务器配置为使 PHP 会话保持活动 40 分钟。如果您有权访问服务器,则可以在服务器上更改此设置。

您也可能因为服务器没有太多资源来同时发出如此多的请求而被卡住。理想情况下,您应该微调您的服务器配置以获得更好的性能。

也考虑使用

curl_multi_init以获得更好的性能和异步请求。

但这并不能保证请求会因为 TIMEOUT 而被丢弃。所以微调服务器可能仍然需要。

另请查看这篇文章以了解如何增加时间限制


推荐阅读