php - 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);
解决方案
尝试包装curl_init
并curl_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 而被丢弃。所以微调服务器可能仍然需要。
另请查看这篇文章以了解如何增加时间限制:
推荐阅读
- php - PHP regexp 解析避免子字符串
- html - 错误类型错误:无法读取 Angular 模板中未定义的属性“描述”
- javascript - Promise resolve 在 TypeScript 中有错误,因为错过了任何类型
- c++ - c ++中的频率直方图
- python - Pylance 报告GeneralyTypeIssues 预期的类类型,但收到“SQLAlchemy”
- multithreading - C++多线程内存泄漏问题
- javascript - 用于检索可拖动对象的两个不同 id?
- flutter - 将 Flutter 应用程序部署到 Google Play 商店,但它卡在初始屏幕上
- python-3.x - 创建带有循环的按钮不会创建单独的标签
- javascript - 社区大学课程的 SIMPLE JS Twitter 代码