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中curl、fsocket、file_get_content三个函数的使用比较
May 09 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
php中的curl_multi系列函数使用例子
Jul 29 PHP
PHP 验证登陆类分享
Mar 13 PHP
PHP人民币金额转大写实例代码
Oct 02 PHP
YiiFramework入门知识点总结(图文教程)
Dec 28 PHP
详谈PHP程序Laravel 5框架的优化技巧
Jul 18 PHP
Redis构建分布式锁
Mar 28 PHP
laravel框架关于搜索功能的实现
Mar 15 PHP
yii2多图上传组件的使用教程
May 10 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
tp5.1 实现setInc字段自动加1
Oct 18 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中error与exception的区别及应用
2014/07/28 PHP
php实现的简单日志写入函数
2015/03/31 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
PHP+Redis开发的书签案例实战详解
2019/07/09 PHP
laravel 解决后端无法获取到前端Post过来的值问题
2019/10/22 PHP
tp5框架基于ajax实现异步删除图片的方法示例
2020/02/10 PHP
Aster vs Newbee BO5 第三场2.19
2021/03/10 DOTA
JavaScript 学习初步 入门教程
2010/03/25 Javascript
使用JavaScript获取电池状态的方法
2014/05/03 Javascript
3种Jquery限制文本框只能输入数字字母的方法
2014/12/03 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
2015/09/17 Javascript
js常用的继承--组合式继承
2017/03/06 Javascript
自制简易打赏功能的实例
2017/09/02 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
Mac下安装vue
2018/04/11 Javascript
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
js实现数字从零慢慢增加到指定数字示例
2019/11/07 Javascript
JavaScript/TypeScript 实现并发请求控制的示例代码
2021/01/18 Javascript
python中引用与复制用法实例分析
2015/06/04 Python
Django基础知识与基本应用入门教程
2018/07/20 Python
python 使用 requests 模块发送http请求 的方法
2018/12/09 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
python 实现两个npy档案合并
2020/07/01 Python
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
平面设计自荐信
2013/10/07 职场文书
精细化工应届生求职信
2013/11/17 职场文书
合作协议书范本
2014/04/17 职场文书
应聘英语教师求职信
2014/04/24 职场文书
行政诉讼答辩状
2015/05/21 职场文书
会议简报格式范文
2015/07/20 职场文书
优秀团员主要事迹材料
2015/11/05 职场文书
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript
Python按顺序遍历并读取文件夹中文件
2022/04/29 Python