在 laravel 中,可通过设置 `ini_set(‘max_execution_time’, ‘0’)` 取消脚本最大执行时间限制,使路由(如常驻服务接口)持续运行而不被 php 默认的 60 秒超时中断。需注意 cli 与 web 环境差异及系统级防护机制。
Laravel 路由默认运行于 Web SAPI(如 Apache 或 Nginx + PHP-FPM)环境下,而这类环境对请求响应时间有严格约束:PHP 默认 max_execution_time = 30(或常见配置为 60),Web 服务器(如 Nginx 的 fastcgi_read_timeout、Apache 的 Timeout)及反向代理(如 Cloudflare)也会主动终止“长时间无响应”的连接。因此,仅靠 ini_set(‘max_execution_time’, ‘10000000’) 无法生效——因为该设置在 Web SAPI 下可能被服务器强制覆盖,且非零值仍存在理论上限。
✅ 正确做法是显式禁用时间限制:
// routes/web.php 或控制器方法中
Route::get('/running-service', function () {
// 关键:设为 0 表示无时间限制
ini_set('max_execution_time', '0');
// 可选:关闭输出缓冲,避免因响应未完成触发超时
if (function_exists('apache_get_modules') && in_array('mod_php', apache_get_modules())) {
@apache_setenv('no-gzip', 1);
@ini_set('zlib.output_compression', 'Off');
}
while (true) {
// 执行核心逻辑(例如轮询、心跳、数据采集等)
\Log::info('Service is running...', ['timestamp' => now()]);
// 必须加入 sleep,避免 CPU 100% 占用
sleep(5);
}
});
⚠️ 重要注意事项: