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 相关文章推荐
使用Apache的rewrite技术
Jun 22 PHP
php一句话cmdshell新型 (非一句话木马)
Apr 18 PHP
PHP开发负载均衡指南
Jul 17 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
Apr 07 PHP
理解和运用PHP中的多态性[译]
Aug 02 PHP
windows环境下php配置memcache的具体操作步骤
Jun 09 PHP
分享下PHP register_globals 值为on与off的理解
Sep 26 PHP
跟我学Laravel之请求与输入
Oct 15 PHP
php有效防止同一用户多次登录
Nov 19 PHP
PHP中的Trait 特性及作用
Apr 03 PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 PHP
php微信开发之关键词回复功能
Jun 13 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
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
php检查页面是否被百度收录
2015/10/28 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
js日期联动示例
2014/05/02 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
关于前后端json数据的发送与接收详解
2017/07/30 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
Angular之toDoList的实现代码示例
2017/12/02 Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
2018/01/22 Javascript
React Native 图片查看组件的方法
2018/03/01 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
JS数组去重常用方法实例小结【4种方法】
2018/05/28 Javascript
Webpack devServer中的 proxy 实现跨域的解决
2018/06/15 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
详解webpack 热更新优化
2018/09/13 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
手动实现vue2.0的双向数据绑定原理详解
2021/02/06 Vue.js
[03:12]完美世界DOTA2联赛PWL DAY7集锦
2020/11/06 DOTA
python实现的生成随机迷宫算法核心代码分享(含游戏完整代码)
2014/07/11 Python
对Python3 序列解包详解
2019/02/16 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
Python类的继承super相关原理解析
2020/10/22 Python
项目建议书范文
2014/05/12 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
花田少年史观后感
2015/06/16 职场文书
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js