关于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 参数 ...
随机推荐
- JS 阻止整个网页的内容被选中
pretty-girl { -webkit-user-select: none; } 可是!可是!不是每个浏览器都可以不忧桑!!!那就只能请脚本大王出山了. 阻止选中 有时候,我们需要禁止用户选中一些 ...
- 残酷中蜕变的SEOer
SEO在不断蜕变,今天的自己推翻昨天的自己. 大牛说"SEOer们走的路不同,最终都会殊途同归." 最后都会炼出"SEO的道"最终都会回归到网站基础工程.毕 ...
- 湖南多校对抗赛(2015.05.03)Problem A: Twenty-four point
给四个数 问能不能算出24点...我的方法比较烂...920ms 差点TLE.应该有更好的方法. #include<stdio.h> #include<string.h> #i ...
- Java Swing 日期控件(转载)
http://www.cnblogs.com/lzy1991/p/5714935.html
- jquery收集--php收集所有post数据
$model = D('Account'); $data = $model->create(); jquery收集数据 sendinvite.serialize() function init ...
- stb_image读取图片数据
#include <iostream> #include <fstream> #include <stbi/stb_image.h> const unsigned ...
- Java线程经典面试题
53道Java线程面试题 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序 ...
- Openjudge-计算概论(A)-鸡兔同笼
描述一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外).已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物输入第1行是测试数据的组数n,后面跟着n行输入.每组测试数 ...
- Smarty练习增删改
<?php //将题目表显示在页面 include("../init.inc.php"); include("../DBDA.php"); $db = n ...
- ***C - I love sneakers!(动态规划,分组背包)
C - I love sneakers! Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64 ...