关于PHP执行超时的问题
PHP配置文件的参数max_execution_time表示脚本执行超时时间
max_execution_time=0表示不限制
max_execution_time=2表示执行两秒后终止,同时报错Fatal error: Maximum execution time of 2 seconds exceeded
但是,sleep(10)函数是不起作用的。
例如,php.ini中的max_execution_time=2
执行代码 <?php sleep(10);echo 'ok'; ?> 是不会超时的(前提是web服务器不超时)
执行代码 <?php echo 1;for($i=0;$i<100000000000;$i++){ for($i=0;$i<100000000000;$i++){}} echo 2;?> 会超时,输出1,且报错
注:set_time_limit()函数是可以覆盖max_execution_time参数的,可以比max_execution_time参数大,也可以为0表示不限制,当然
当此函数被调用时,set_time_limit()会从零开始重新启动超时计数器。换句话说,如果超时默认是30秒,在脚本运行了了25秒时调用 set_time_limit(20),那么,脚本在超时之前可运行总时间为45秒
还有一种情况
如果PHP工作在php-fpm模式,例如web服务器是nginx
这时候的超时还取决于php-fpm.conf中的配置request_terminate_timeout
这个参数是这么解释的:the timeout for serving a single request after which the worker process will be killed. This option should be used when the 'max_execution_time' ini option does not stop script execution for some reason.
大概的意思是如果max_execution_time这个参数没有限制脚本的执行,就取决于这个参数的超时,例如,max_execution_time=0;或者max_execution_time大于request_terminate_timeout的值,或者程序中有sleep(),最终的超时都取决于request_terminate_timeout参数;
当然如果程序是因为request_terminate_timeout超时是不会有内容输出的,会报502错误,502 Bad Gateway/Nginx 1.7
综上,总结下列对照表,如果有不对的地方,欢迎大家指正
|
非fpm max_execution_time=4 |
fpm request_terminate_timeout=8 max_execution_time=4 |
fpm request_terminate_timeout=4 max_execution_time=8 |
fpm request_terminate_timeout=4 max_execution_time=0 |
|
|
<?php echo 1;sleep(10);echo 2; ?> |
输出:12 | 输出:502 Bad Gateway | 输出:502 Bad Gateway | 输出:502 Bad Gateway |
|
<?php echo 1;$i=0; while($i++<1000000000) {//假设会执行很久} echo 2; ?> |
输出:1 Fatal error: Maximum execution time of 4 seconds exceeded |
输出:1 Fatal error: Maximum execution time of 4 seconds exceeded |
输出:502 Bad Gateway | 输出:502 Bad Gateway |
关于PHP执行超时的问题的更多相关文章
- C# 给某个方法设定执行超时时间 C#如何控制方法的执行时间,超时则强制退出方法执行 C#函数运行超时则终止执行(任意参数类型及参数个数通用版)
我自己写的 /// <summary> /// 函数运行超时则终止执行(超时则返回true,否则返回false) /// </summary> /// <typepara ...
- 转 C# 给某个方法设定执行超时时间
在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死. 在这时.我们可以通过Thread.Thread + Invoke(UI)或者是 delegate.Begin ...
- Java基础知识强化之网络编程笔记25:Android网络通信之 Future接口介绍(Java程序执行超时)
1. Future接口简介 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API ...
- [C#.net]SqlDataAdapter 执行超时已过期 完成操作之前已超时或服务器未响应
随着数据库数据的不断增大,查询时间也随之增长.而客户端与数据库连接时间以及命令的执行时间都是有限的.默认为30s.所以在查询数据的时候,程序会出现 “超时时间已到.在操作完成之前超时时间已过或服务器未 ...
- PostgreSQL执行超时的问题
PostgreSQL执行超时的问题 使用背景 最近在使用PostgreSQL的时候,在执行一些数据库事务的时候,先后出现了statement timetout 和idle-in-transaction ...
- Java程序执行超时——Future接口介绍
在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API的一部分,在java.uti ...
- C# 方法执行超时处理
封装了一个方法,用于处理一些需要判断是否执行超时了的操作 internal static T TimeoutCheck<T>(int ms, Func<T> func) { v ...
- DbCommand :执行超时已过期。完成操作之前已超时或服务器未响应。
问题:“Timeout 时间已到.在操作完成之前超时时间已过或服务器未响应.”的解决方法 在一个链接数据库的时候,老是出现超时的错误:执行超时已过期.完成操作之前已超时或服务器未响应. 就是给这个链接 ...
- 【故障公告】再次遭遇SQL语句执行超时引发网站首页访问故障
非常抱歉,昨天 18:40~19:10 再次遭遇上次遇到的 SQL 语句执行超时引发的网站首页访问故障,由此您带来麻烦,请您谅解. 上次故障详见故障公告,上次排查下来以为是 SQL Server 参数 ...
随机推荐
- Linux增加swap分区大小
1. 查看当前分区情况 free -m 2. 增加 swap 大小, 2G 左右 dd if=/dev/zero of=/var/swap bs=1024 count=2048000 3. 设置交换文 ...
- notepad 是doc 调出记事本文件
notepad 是doc 调出记事本文件notepad 是doc 调出记事本文件notepad 是doc 调出记事本文件
- Windows10 Apache2.4 PHP7 MySQL 5.7安装教程
最近细细的折腾了win10下PHP环境的安装过程,每次安装总是有小问题,现在总结一下.安装之前需要注意,下载的安装包(除MySQL)外必须统一是64位或者统一时32位. 一. MySQL5.7的安装 ...
- treeview自动从表中添加标题和列值做目录的方法2
treeview自动从表中添加标题和列值做目录的方法2,该方法是借鉴万一老师的 http://www.cnblogs.com/del/archive/2008/05/15/1114450.html 首 ...
- MVC中发生System.Data.Entity.Validation.DbEntityValidationException验证异常的解决方法
发生System.Data.Entity.Validation.DbEntityValidationException这个异常的时候,如果没有用特定的异常类去捕捉,是看不到具体信息的. 通常都是用Sy ...
- DOS/VBS - 用 bat 批处理 实现自动telnet
一.VBS法 1. 建立一个tel.vbs脚本 '建立Shell对象 set sh=WScript.CreateObject("WScript.Shell") WScript.Sl ...
- Smarty自定义函数
自定义函数:<{方法名称}> 在html页面是可以直接赋值的:(没啥作用只是知道即可) <{$a = "hello"}><div><{$a ...
- Html加载swf 兼容IE8 (含以下)显示
嵌入参数说明: 1,AllowScriptAccess 参数: sameDomain:仅当 SWF 文件和网页位于同一域中时才允许执行外出脚本访问.这是 AVM2 内容的默认值----播放网络视频, ...
- 转载-ACPI的知识
ACPI – the Advanced Configuration & Power Interface. ACPI是OS,BIOS和硬件之间的抽象层.它允许OS和平台独立的发展,比如新的OS可 ...
- Java对象的强、软、弱和虚引用原理+结合ReferenceQueue对象构造Java对象的高速缓存器
//转 http://blog.csdn.net/lyfi01/article/details/6415726 1.Java对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变 ...