PHP http请求超时问题解决方案


Posted in PHP onNovember 13, 2020

一,http请求超时时间

可能出现的场景:

1,curl进程运行了一个世纪还木结束,curl的时候设置了超时时间 --connect-timeout 1000

2,operation timed out after 1000 milliseconds with 0 bytes received

3,connect() timed out!

wget对超时时间, 是有分阶段的, 比如说请求的超时, 传输的超时,同样HTTP请求有两个超时时间:一个是连接超时时间,另一个是数据传输的最大允许时间,出现问题就要看是哪个超时时间出问题了。

curl命令行
连接超时时间用 --connect-timeout 参数来指定,数据传输的最大允许时间用 -m 参数来指定,时间是毫秒

例如:

curl --connect-timeout 10 -m 20 "http://***"

连接超时的话,出错提示形如:

curl: (28) connect() timed out!

数据传输的最大允许时间超时的话,出错提示形如:

curl: (28) Operation timed out after 2000 milliseconds with 0 bytes received

使用PHP的curl_init

<?php // create a new cURL resource $ch = curl_init(); // set URL and other appropriate options curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); curl_setopt($ch, CURLOPT_HEADER, 0);

//连接超时时间 curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000);

//数据传输的最大允许时间 curl_setopt($ch, CURLOPT_TIMEOUT, 1000); // grab URL and pass it to the browser curl_exec($ch); // close cURL resource, and free up system resources 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秒,实际上最大执行时间=php.ini里的max_execution_time数值 - 当前脚本已经执行的时间 + 设定值

假如php.ini里的max_execution_time=30,当前脚本已经执行5秒,则:

最大执行时间=30-5+800=825秒。

注意 : 当PHP是执行在安全模式时,set_time_limit( )将不会有结果,除非是关闭安全模式或是修改结构档案中的时间限制。

三,php长连接

如果我们需要一个脚本持续的运行,那么我们就要通过php长连接的方式,来达到运行目的。通过 set_time_limit 来设置一个脚本的执行时间为无限长;然后使用 flush() 和 ob_flush() 来清除服务器缓冲区,随时输出脚本的返回值。

如下面这段脚本:

<?php
header("Content-Type: text/plain");
set_time_limit(0);
$infoString = "Hello World" . "\n";
while( isset($infoString) )
{
  echo $infoString;
  flush();
  ob_flush();
  sleep(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 restart

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php你的验证码安全码?
Jan 02 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
Feb 21 PHP
PHP三元运算符的结合性介绍
Jan 10 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
11个PHPer必须要了解的编程规范
Sep 22 PHP
PDO防注入原理分析以及注意事项
Feb 25 PHP
Symfony2学习笔记之模板用法详解
Mar 17 PHP
php实现图片上传时添加文字和图片水印技巧
Apr 18 PHP
浅析PHP数据导出知识点
Feb 17 PHP
Laravel实现搜索的时候分页并携带参数
Oct 15 PHP
Laravel框架下的Contracts契约详解
Mar 17 PHP
THINKPHP5分页数据对象处理过程解析
Oct 28 PHP
PHP dirname简单使用代码实例
Nov 13 #PHP
PHP mkdir创建文件夹实现方法解析
Nov 13 #PHP
PHP接入支付宝接口失效流程详解
Nov 10 #PHP
基于PHP实现用户在线状态检测
Nov 10 #PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
Nov 10 #PHP
PHP safe_mode开启对于PHP系统函数有什么影响
Nov 10 #PHP
通过PHP实现用户注册后邮箱验证激活
Nov 10 #PHP
You might like
PHP之COOKIE支持详解
2010/09/20 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
PHP强制转化的形式整理
2020/05/22 PHP
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
javascript中setTimeout和setInterval的unref()和ref()用法示例
2014/11/26 Javascript
JavaScript实现俄罗斯方块游戏过程分析及源码分享
2015/03/23 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
JAVA四种基本排序方法实例总结
2015/07/24 Javascript
javascript事件模型介绍
2016/05/31 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
jQuery+pjax简单示例汇总
2017/04/21 jQuery
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
Vue中使用matomo进行访问流量统计的实现
2019/11/05 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
Python实现从百度API获取天气的方法
2015/03/11 Python
在Python的Flask框架中构建Web表单的教程
2016/06/04 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
python 随机打乱 图片和对应的标签方法
2018/12/14 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
python调用外部程序的实操步骤
2019/03/04 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
基于Python解密仿射密码
2019/10/21 Python
python等待10秒执行下一命令的方法
2020/07/19 Python
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
纽约家具、家居装饰和地毯店:ABC Carpet & Home
2017/06/21 全球购物
《王二小》教学反思
2014/02/27 职场文书
水毁工程实施方案
2014/04/01 职场文书
2014年营销工作总结
2014/11/22 职场文书
水电工程师岗位职责
2015/02/13 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript
Python类方法总结讲解
2021/07/26 Python
HTML中的表单元素介绍
2022/02/28 HTML / CSS