PHP接口超时需分三层配置:脚本执行层设max_execution_time或set_time_limit()兜底;网络连接层用CURLOPT_CONNECTTIMEOUT和CURLOPT_TIMEOUT控制cURL请求;数据读写层通过MySQLi选项、PDO DSN参数或default_socket_timeout优化底层连接,同时须协同Nginx/Apache服务器超时设置,缺一不可。

PHP接口超时配置不能只调一个参数,得按“脚本执行”“网络连接”“数据读写”三层分别设,否则容易卡在某一步没响应却无报错。
脚本总执行时间(max_execution_time)
这是兜底限制,防止脚本无限运行拖垮服务。默认30秒,对简单API够用;但处理文件导入、批量同步或复杂计算时,建议设为120~300秒。生产环境不建议设为0,除非是CLI后台任务。
- 全局改:编辑php.ini,设
max_execution_time = 180,改完重启PHP-FPM或Apache - 单脚本改:开头加
set_time_limit(180)或ini_set('max_execution_time', 180) - 注意:
set_time_limit()每次调用都会重置计时器,循环中可反复用
cURL请求超时(CURLOPT_CONNECTTIMEOUT / CURLOPT_TIMEOUT)
调外部API时,超时必须显式设置,否则依赖系统默认(可能长达75秒),导致接口迟迟不返回。
-
CURLOPT_CONNECTTIMEOUT:TCP建连最大等待时间,建议5~10秒。网络不稳定时可略放宽,但别超过15秒 -
CURLOPT_TIMEOUT:整个请求(含DNS、连接、发送、接收)上限,建议30~60秒 - 高精度控制可用
CURLOPT_TIMEOUT_MS和CURLOPT_CONNECTTIMEOUT_MS,单位毫秒 - 务必配合
CURLOPT_NOSIGNAL = 1,避免信号中断引发不可控错误
数据库与Socket连接超时
MySQL连接慢、Redis响应卡、file_get_contents挂起,往往不是脚本超时,而是底层连接或读写卡住。
立即学习“PHP免费学习笔记(深入)”;
- MySQLi:连接后立即设
mysqli_options($link, MYSQLI_OPT_CONNECT_TIMEOUT, 5)和MYSQLI_OPT_READ_TIMEOUT, 10 - PDO(如ThinkPHP6):DSN里加
;connect_timeout=3(PHP 8.1+有效),主机用IP而非域名绕过DNS延迟 - 通用Socket:修改php.ini中
default_socket_timeout = 30,影响fsockopen、file_get_contents等 - Stream操作:用
stream_context_create(['http' => ['timeout' => 15]])单独设HTTP流超时
Web服务器协同配置(常被忽略)
PHP设了30秒,但Nginx默认fastcgi_read_timeout只有60秒,Apache的Timeout指令也可能更短——任一环节先超时,PHP就直接被杀掉。
- Nginx:在server或location块中加
fastcgi_connect_timeout 300;、fastcgi_send_timeout 300;、fastcgi_read_timeout 300; - 如果用了反向代理:
proxy_read_timeout 300; - Apache:确认
Timeout指令不低于PHP设定值



















