PHP修改php.ini超时配置后脚本仍20分钟退出,无法延长执行时间怎么办?
超时问题解决方案
1 优先排查Apache服务超时配置
你遇到的20分钟(1200秒)刚好是XAMPP默认Apache服务的全局超时阈值,该配置优先级高于php.ini的设置:
- 打开XAMPP安装目录下的
apache/conf/httpd.conf文件 - 查找
Timeout参数,默认值通常为Timeout 1200,修改为Timeout 21600 - 如果你是用反向代理方式调用Python API,额外查找
ProxyTimeout参数,同样修改为ProxyTimeout 21600 - 保存配置后重启Apache服务生效
2 检查API调用函数的独立超时设置
PHP中curl、file_get_contents等网络请求函数的超时参数优先级高于全局php.ini配置,需要单独指定:
file_get_contents配置示例
$streamContext = stream_context_create([ 'http' => [ 'timeout' => 21600 ] ]); $apiResult = file_get_contents('http://你的PythonAPI地址', false, $streamContext);
curl配置示例
$curlHandler = curl_init('http://你的PythonAPI地址'); curl_setopt($curlHandler, CURLOPT_RETURNTRANSFER, true); // 整体请求超时时间,单位秒 curl_setopt($curlHandler, CURLOPT_TIMEOUT, 21600); // 连接建立阶段超时时间,可按需调整 curl_setopt($curlHandler, CURLOPT_CONNECTTIMEOUT, 300); $apiResult = curl_exec($curlHandler); curl_close($curlHandler);
3 规避浏览器主动断连问题
部分浏览器默认会在长时间无响应时主动断开连接,你可以先用curl命令行工具直接请求你的PHP接口验证:如果命令行可以正常拿到返回结果,说明是浏览器限制,建议调整为异步任务架构规避该问题:
- PHP接收到请求后先将任务存入任务队列,直接返回任务ID给前端
- 后端独立进程消费队列执行耗时任务,执行完后将结果存入缓存/数据库
- 前端根据任务ID轮询查询任务状态,任务完成后再拉取最终结果
该方案不需要调整任何超时配置,稳定性远高于长连接同步等待方案。
内容的提问来源于stack exchange,提问作者Gopipuli
相关产品推荐
相关产品推荐

