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

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

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

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

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

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

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

相关推荐
linux_cfan13 分钟前
videojs v10 源代码系列解读:34 · `createComposition`:类型安全的冲突检测
前端·安全
周杰偷奶茶26 分钟前
【Java】数组的定义和使用(附管理系统实战案例)
java·开发语言
橙子圆1231 小时前
JUC之集合类不安全
java·开发语言
阿里嘎多学长1 小时前
2026-09-29 GitHub 热点项目精选
开发语言·程序员·github·代码托管
Bruce_Liuxiaowei1 小时前
网页版 DeepSeek “harness desktop“ WebGL 上下文创建失败排查实录
开发语言·javascript·webgl
utmhikari1 小时前
【AI原生】借助AI之力优化个人博客前端样式
前端·css·hexo·next·个人博客·ai-native·vibe coding
狗凯之家源码网1 小时前
PHP 用户反馈系统源码深度评测与实战指南
开发语言·php·用户反馈系统
小凯在掘金2 小时前
为什么箭头函数不能作为构造函数?
前端·javascript
谢亮_vipxieliang2 小时前
Stream API 不是银弹:常见坑与性能建议
java·开发语言