PHP接口超时后为什么任务还在跑

最近处理一个后台接口时遇到一个比较容易误判的问题:用户点击执行任务,前端等了几十秒后提示请求超时,但过一会儿刷新页面,却发现任务其实已经执行成功了。有些用户看到报错后又点一次,结果同一批数据被处理了两遍。

最开始以为是 PHP 超时以后程序就会停止,实际排查日志才发现,浏览器断开连接和服务端 PHP 停止执行并不是一回事。前端请求虽然已经超时,Nginx 也可能结束等待,但 PHP-FPM 里的脚本仍然在继续执行后面的数据库查询、文件处理或者第三方接口请求。

后来把耗时操作从普通接口里拆了出来。用户点击后,接口只负责生成一条任务记录并立即返回任务编号,真正的数据处理交给后台任务执行。页面通过任务状态判断处理中、成功还是失败,重复点击时也会先检查同一任务是否已经存在,避免再次提交。

同时给每个任务增加开始时间、结束时间、执行结果和异常日志。这样即使后台处理几分钟,前端也不需要一直保持 HTTP 请求。

现在做批量处理、文件生成、数据同步这类耗时功能时,我一般不会让一个 PHP 请求从头跑到尾。接口响应时间和业务执行时间最好分开处理,不然一旦网络慢或者前端超时,很容易出现"页面说失败,后台却已经执行"的情况。

#PHP开发 #接口超时 #后台任务 #系统开发

相关推荐
m0_734571763 小时前
深入理解C++ 构造函数<十一> initializer_list 构造
开发语言·c++
今天AI了吗3 小时前
2026年三大AI桌面智能体横评:Codex vs Hermes vs WorkBuddy
大数据·前端·css·人工智能·架构
数据狐(Datafox)3 小时前
京东商品详情API接口解析(附 JSON 样例)
java·开发语言·json
Wang's Blog3 小时前
Java框架快速入门: Spring Security+OAuth2之深度定制UserDetailsService与密码无缝升级
java·开发语言·spring
kill5224 小时前
interface vs type:到底该用哪个
前端
白远山4 小时前
智慧场馆解决方案小程序系统开发实战与架构设计指南
java·开发语言·小程序·架构
ECT-OS-JiuHuaShan4 小时前
哲学是迭代学,数学是拓扑学
开发语言·人工智能·学习·算法·机器学习·php·拓扑学
影视飓风TIM4 小时前
C++异常与RAII智能指针笔记
开发语言·c++·笔记
敲代码的嘎仔4 小时前
从零实现视频续播 + 学习进度统计:前端心跳、条件更新、GROUP BY 统计全链路拆解
java·前端·数据库·学习·面试·职场和发展·音视频