php超时设置max_execution_time

PHP文件上传配置
本文介绍如何修改PHP配置以增加文件上传大小限制,包括调整执行时间、POST数据大小及上传文件的最大尺寸。

有些朋友要通过自己的网站后台,包括论坛,来上传一些文件,php一般为2m,或8m(以下我们按默认为2m),接下来就是来讲怎么修改上传文件大小的。

1.首先修改执行上传文件限制

一般的文件上传,除非文件很小.就像一个5M的文件,很可能要超过一分钟才能上传完.
但在php中,默认的该页最久执行时间为 30 秒.就是说超过30秒,该脚本就停止执行.
这就导致出现 无法打开网页的情况.这时我们可以修改 max_execution_time

在php.ini里查找
max_execution_time
默认是30秒.改为
max_execution_time = 0
0表示没有限制

另一种方法是可以在php程序中加入
set_time_limit();
来设定页面最久执行时间.
set_time_limit(0);//0表示没有限制

2.其次修改数据包的最大限制

修改 post_max_size 设定 POST 数据所允许的最大大小。此设定也影响到文件上传。
php默认的post_max_size 为2M.如果 POST 数据尺寸大于 post_max_size $_POST 和 $_FILES superglobals 便会为空.
查找 post_max_size .改为
post_max_size = 150M

3. 最好修改上传文件的最大限制

很多人都会改了第二步.但上传文件时最大仍然为 2M.
为什么呢.我们还要改一个参数upload_max_filesize 表示所上传的文件的最大大小。
查找upload_max_filesize,默认为8M改为
upload_max_filesize = 100M

另外要说明的是,post_max_size 大于 upload_max_filesize 为佳

http://www.cnblogs.com/pinnasky/archive/2011/03/04/1971251.html

<think>嗯,用户之前问的是关于使用jQuery和PHP建立SSE连接时很快断开的问题,我之前已经给出了一些分析,比如PHP脚本提前终止、输出缓冲问题、服务器超时设置和客户端网络中断。现在用户的新问题是想了解如何设置PHPmax_execution_time来解决SSE连接断开的问题。 首先,我需要回顾一下之前提到的引用内容。引用[1]提到max_execution_time默认是30秒,而CLI模式下是0。引用[2]建议即使需要长时间运行,也应设置一个超时时间比如12小时,避免进程夯住导致服务雪崩。用户现在关心的是如何合理设置这个值来保持SSE连接不中断。 用户可能的情况是他们的PHP脚本因为max_execution_time设置得太短,导致脚本提前终止,进而断开SSE连接。但用户也可能没有正确配置其他相关设置,比如忽略用户中止或保持连接的活动状态。 接下来,我需要结合之前的回答和引用内容,详细说明max_execution_time对SSE的影响,以及如何合理设置。要提到不仅要修改这个参数,还需要配合set_time_limit(0)来禁用脚本超时,同时使用ignore_user_abort(true)保持脚本运行。此外,服务器配置如Nginx的proxy_read_timeout也需要调整,避免服务器层面的超时。 还需要注意,虽然设置max_execution_time为0可以无限执行,但引用[2]建议即使长时间运行也应设置合理的超时,比如12小时,避免资源耗尽。因此,在建议中要平衡持久连接和系统稳定性,推荐设置较大的值而不是完全禁用。 另外,用户可能没有意识到输出缓冲的问题,需要再次强调ob_flush()和flush()的使用,确保数据实时发送,避免浏览器因超时断开。同时,客户端重连机制也是必要的,以应对网络波动或其他临时问题。 最后,给出具体的配置步骤和示例代码,帮助用户正确设置PHP脚本,调整服务器配置,并增强客户端的健壮性。还要提醒用户进行测试和监控,确保配置生效,连接稳定。</think>根据SSE连接场景特点及PHP执行时间限制机制,以下是关于`max_execution_time`设置的系统性分析及解决方案: --- ### 一、核心参数作用原理 1. **默认限制** PHP默认`max_execution_time = 30`(秒),该限制针对**单个PHP进程**的CPU占用时间[^1] ```php // 典型错误场景 while(true) { // 无限循环将触发超时 echo "data: heartbeat\n\n"; sleep(5); // sleep不计入执行时间 } ``` - *注意*:`sleep()`等I/O等待时间不被计入执行时间统计 2. **SSE连接特殊性** - 需要保持**持久HTTP连接** - 典型场景需要脚本持续运行数小时甚至数天 - 实际CPU占用时间远小于连接持续时间 --- ### 二、参数设置策略 #### 1. **基础设置方案** ```php // 脚本头部设置(必须) set_time_limit(0); // 禁用脚本执行时间限制 ignore_user_abort(true); // 保持脚本持续运行 header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); // 业务逻辑 while(connection_status() == CONNECTION_NORMAL) { sendData(); sleep(1); } ``` #### 2. **生产环境建议值** | 场景 | 建议值 | 原理 | |-------|--------|------| | 测试环境 | 0 | 完全禁用限制 | | 生产环境 | 43200(12小时) | 预防僵尸进程积累[^2] | | 高并发场景 | 1800(30分钟)+ 自动重启 | 平衡资源利用率 | --- ### 三、多层级超时控制 #### 1. **PHP配置层** ```ini ; php.ini调整(需服务器权限) max_execution_time = 0 max_input_time = -1 ``` #### 2. **Web服务器层** ```nginx # Nginx代理配置 proxy_read_timeout 3600s; # 必须大于PHP超时设置 fastcgi_read_timeout 3600s; ``` #### 3. **应用层防护** ```php // 添加熔断机制 $start_time = microtime(true); while(true) { if (microtime(true) - $start_time > 86400) { // 24小时自动终止 break; } // ...业务逻辑... } ``` --- ### 四、异常排查流程 1. **现象诊断表** | 断开时间 | 可能原因 | 验证方法 | |---------|---------|---------| | 30秒准时断开 | `max_execution_time`未修改 | 检查`phpinfo()`输出 | | 60秒断开 | Nginx超时限制 | 执行`curl -vN`测试 | | 随机时间断开 | 客户端网络中断 | 查看浏览器控制台错误 | 2. **实时状态监控** ```bash # 查看PHP进程运行时间 ps -eo pid,etime,args | grep sse_handler.php ``` --- ### 五、推荐配置组合 ```ini ; 安全配置模板(php.ini) max_execution_time = 14400 ; 4小时 max_input_time = 14400 memory_limit = 256M ; 配合脚本内设置 set_time_limit(0); // 覆盖全局设置 ``` --- ### 六、注意事项 1. **资源泄漏预防** - 必须添加`connection_aborted()`检测 ```php if(connection_aborted()) { cleanup_resources(); exit; } ``` 2. **负载均衡策略** - 当使用多服务器时,建议设置差异化超时时间 ```php $server_id = getenv('SERVER_ID'); set_time_limit($server_id % 2 ? 14400 : 7200); ``` 3. **日志监控** ```php // 记录异常终止 register_shutdown_function(function(){ if(error_get_last()) { file_put_contents('sse_errors.log', date('Y-m-d H:i:s').' '.error_get_last()['message']); } }); ``` --- 通过上述多层级配置,可有效解决因PHP执行时间限制导致的SSE连接异常断开问题,同时保证服务稳定性[^1][^2]。建议配合压力测试工具(如`siege`)验证配置效果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值