本文主要介绍PHP http请求超时问题的解决方法,通过示例代码非常详细的介绍,对大家的学习或者工作有一定的参考价值,有需要的朋友可以参考一下。
一,http请求超时时间
可能的场景:
1.卷曲过程已经运行了一个世纪,但它仍然会结束。当curl运行时,它设置一个timeout - connect-timeout 1000。
2,操作在1000毫秒后超时,收到0个字节
3、connect()超时!
Wget有不同的超时,比如请求超时和传输超时。同样,HTTP请求也有两个超时:一个是连接超时,另一个是数据传输的最大允许时间。如果有问题,就看哪个超时出了问题。
Curl命令行
连接超时由- connect-timeout参数指定,数据传输的最大允许时间由-m参数指定,时间为毫秒。
例如:
curl-connect-time out 10-m 20 ' http://* * * '
如果连接超时,错误提示如下:
curl: (28) connect()超时!
如果数据传输的最大允许时间超时,将出现如下错误提示:
curl: (28)操作在2000毫秒后超时,收到0个字节
使用PHP的curl_init
?php //创建新的cURL资源$ ch=cURL _ init();//设置URL和其他适当的选项curl_setopt($ch,CURLOPT_URL,' http://www . example . com/');curl_setopt($ch,CURLOPT_HEADER,0);
//连接超时curl _ setopt ($ ch,curl opt _ connect timeout,1000);
//数据传输的最大允许时间curl _ setopt ($ ch,curl opt _ timeout,1000);//抓取URL并传递给浏览器curl _ exec($ ch);//关闭cURL资源,释放系统资源cURL _ close($ ch);
//使用curl_error($ch)查看错误var_dump(curl_error($ch))的详细信息;
二,页面执行时间
当你的页面有大量数据时,建议使用set_time_limit()控制运行时间,配置页面的最大执行时间。
设置允许程序执行的秒数。如果到了限定的时间,程序将返回一个错误。时间以秒为单位。
Php.ini:它预设的限制时间是30秒。max_execution_time的值在结构文件中定义。如果秒数设置为0,则表示没有时间限制。修改后重启apache/nginx服务器。
Php代码:set _ time _ limit(800);
该函数指定当前php脚本的最大执行时间为800秒。实际上,最大执行时间=max_execution_time值in=PHP . ini-当前脚本已执行时间的设置值。
如果php.ini中的max _ execution _ time=30,并且当前脚本已经执行了5秒,那么:
最大执行时间=30-5 800=825秒。
注意:当PHP在安全模式下运行时,set_time_limit()将没有结果,除非关闭安全模式或者修改结构文件中的时间限制。
三,php长连接
如果我们需要一个脚本持续运行,那么我们必须通过php长连接来运行它。通过set_time_limit将脚本的执行时间设置为无限大;然后用flush()和ob_flush()清空服务器缓冲区,随时输出脚本的返回值。
例如下面的脚本:
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
标题(“Content-Type:text/plain”);
set _ time _ limit(0);
$infoString='Hello World '。\ n ';
while( isset($infoString))
{
echo $ infoString
flush();
ob _ flush();
睡眠(5);
}
?
当我们执行时,每5秒钟,我们会得到一行Hello World。如果我们不按停止键,浏览器会一直一行一行地加载。
通过这种方法,我们可以完成许多功能,如机器人爬虫、即时留言板等程序。
如果想停止运行,只能重启php-fpm:
检查php-fpm进程的数量:
ps aux | grep -c php-fpm
检查运行内存
/usr/bin/php -i|grep mem
重启php-fpm
/etc/init.d/php-fpm重新启动
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。