default_socket_timeout 默认为 60 秒,php 8.6 未更改;cli 可调高至 300–1200 秒,web 环境建议保持 30–60 秒,数据库需确保其大于专用超时值,严禁设为 -1。

default_socket_timeout 是 PHP 中控制所有基于 socket 的流(如 file_get_contents()、fsockopen()、Composer 请求、PDO/MySQLi 连接底层等)整个生命周期的默认超时秒数——从建立连接、传输数据到关闭,必须在这个时间内完成,否则被硬中断。
PHP 8.6 官方未更改该配置的默认值,仍沿用历史设定:
默认为 60 秒(即 default_socket_timeout = 60),且这个值对 CLI 和 Web SAPI 都生效,但实际影响因运行环境而异。
为什么不能盲目设高?比如直接改成 300 或 1200?
-
CLI 场景(如 Composer、命令行脚本):可适当调高(如 300–1200),尤其在慢网、私有 Packagist、大包安装时。但需同步检查
max_execution_time(CLI 下默认 0,通常无需改)。 - Web 场景(如 Apache/FPM):不建议设过高(如 >60)。用户等待超过 10–30 秒已大概率放弃,后端长时间阻塞还会耗尽 worker 进程,引发雪崩。应优先优化业务逻辑或拆分请求,而非延长单次 socket 超时。
-
数据库连接:
default_socket_timeout会作为 mysqli/PDO 的兜底值。若你单独设置了connect_timeout=5或 DSN 中connect_timeout=3,但default_socket_timeout=10,那仍可能被 10 秒截断——所以它应略大于专用超时值,而非远大于。
推荐设置区间(按用途)
-
开发本地 CLI 环境(Composer / Artisan / 自定义脚本)
-
default_socket_timeout = 300(5 分钟)足够应对大多数私有源或临时网络抖动 - 同时确保
max_execution_time = 0(CLI 默认就是 0,不用改)
-
-
生产 Web 环境(Nginx + PHP-FPM)
- 保持
default_socket_timeout = 30或60即可 - 外部 HTTP 请求用
stream_context_create()单独设timeout;数据库用PDO::ATTR_TIMEOUT或 DSN 参数精细控制 - 避免“一刀切”拉高全局 socket 超时,掩盖真实性能瓶颈
- 保持
-
调试/临时绕过
php -d default_socket_timeout=600 your-script.php
或 Composer:
php -d default_socket_timeout=1200 $(which composer) update
检查与修改方式
-
查当前值:
php -i | grep default_socket_timeout
-
找 CLI 专用
php.ini:php --ini
通常路径类似
/etc/php/8.6/cli/php.ini(Linux)或C:\php\php.ini(Windows) -
修改后重启服务(仅 Web SAPI 需要;CLI 每次执行都读新配置):
sudo systemctl restart php8.6-fpm # Ubuntu/Debian
注意:设为 -1 表示永不超时,生产环境严禁使用,极易导致进程卡死、资源泄漏。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











