You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自有雷暴雷达系统PHP脚本执行超时故障求助

解决PHP脚本执行超时(Maximum execution time exceeded)问题

兄弟,我看你这问题是PHP脚本拉取外部闪电检测数据时偶尔触发超时对吧?报错显示Maximum execution time of 30 seconds exceeded,指向main.php第47行——这十有八九是外部服务器响应慢,或者你处理数据的逻辑太耗时,超过了PHP默认的30秒执行时间上限。

下面给你几个针对性的解决思路,按从易到难的优先级来:

1. 临时给脚本加执行时间缓冲

如果只是偶尔出现超时,且你确认数据处理逻辑本身没毛病,最快的办法就是在脚本里手动延长执行时间:

// 把超时时间设为60秒,你可以根据实际需求调整数值
set_time_limit(60);
// 如果是用命令行运行脚本,还可以直接取消时间限制(谨慎使用)
// set_time_limit(0);

注意:如果你的服务器开了safe_mode,或者php.ini里的max_execution_time被锁死了,这个函数可能失效,那你就得往下看其他办法了。

2. 给外部数据请求加单独的超时

问题根源是拉取外部服务器的数据,那咱不能傻等啊!得给HTTP请求加个合理的超时时间,比如10秒内没响应就放弃:

  • 要是你用curl拉数据,这么设置:
$ch = curl_init($你的外部数据接口URL);
curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 整体请求超时10秒
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); // 连接服务器超时5秒
$response = curl_exec($ch);
curl_close($ch);
  • 要是用file_get_contents,就通过上下文设置超时:
$context = stream_context_create([
    'http' => [
        'timeout' => 10 // 10秒超时
    ]
]);
$response = file_get_contents($你的外部数据接口URL, false, $context);

这样就算外部服务器卡壳了,你的脚本也不会一直死等,自然就不会触发全局的30秒超时了。

3. 优化数据处理的代码逻辑

你看看main.php第47行附近的代码,是不是在处理$strikes1到$strikes6这些变量时,做了很多重复操作?比如循环里反复查数据库?或者有没有没必要的数组遍历、字符串拼接?这些细节都可能拖慢脚本速度。

举个例子:如果是批量插入闪电数据,别在循环里一条一条插,改成批量插入语句,能省超多时间。

4. 改用异步方式拉取数据

如果你的雷达系统不需要实时同步外部数据,那完全可以把拉取数据的逻辑拆出来,用定时任务定期跑:
比如写一个单独的fetch_lightning_data.php脚本,用Windows任务计划(或者Linux的crontab)每5分钟跑一次,把拉到的闪电数据存到本地数据库里;然后你的main.php直接从本地数据库读数据,彻底避开外部请求的耗时问题。

这种方式最稳妥,还能避免外部服务器波动影响你的主系统。

5. 修改PHP全局配置(万不得已再用)

如果上面的办法都不适用,你可以改php.ini里的全局执行时间:

max_execution_time = 60 ; 把默认的30改成60或者更大的数值

改完记得重启你的Web服务器(比如IIS)才会生效。但这个是全局设置,会影响所有PHP脚本,所以除非你确定所有脚本都需要更长时间,否则优先用前面的局部调整方法。


内容的提问来源于stack exchange,提问作者Leon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:51:02