fastcgi_finish_request()函数和ignore_user_abort()函数

场景描述:

我们现在有这样一个案例,在oracle数据库导出几十万条数据,保存到json文件中,再把json文件的数据导入excel中。实际情况是执行了一半的时候,程序超时了,不能成功导出excel。

解决方案:

一:在web程序中调用后台脚本实现

二:使用今天的这两个函数(注意:先确认函数是否能正常使用

函数介绍:
复制代码
fastcgi_finish_request()冲刷(flush)所有响应的数据给客户端.
此函数冲刷(flush)所有响应的数据给客户端并结束请求。这允许在不打开与客户端之间的连接的情况下执行耗时任务。 可以提高页面响应速度。

注意问题PHP 与 Web 服务器使用了PHP-FPM(FastCGI进程管理器),那通过fastcgi_finish_request() 函数能马上结束会话,而 PHP 线程可以继续在后台运行。也就是说只针对php-fpm的进程管理方式才能使用该函数

由于该函数不是 PHP 核心函数,所以在某些情况下可能会受限或不可用。因此,在使用该函数之前,最好先检查是否可以使用该函数,并提供备选方案以处理不支持的情况。

ignore_user_abort() 函数设置与客户机断开是否会终止脚本的执行。

本函数返回 user-abort 设置的之前的值(一个布尔值)。

可选。如果设置为 true,则忽略与用户的断开,如果设置为 false,会导致脚本停止运行。

如果未设置该参数,会返回当前的设置

 # 执行耗时程序
    $filename = self::FILE_NAME_KEY . '_' .date('mdHis') . '.xlsx';

    ignore_user_abort(true); // 后台运行
    set_time_limit(0); // 取消脚本运行时间的超时上限

    # 耗时程序
    $model->doSomething();
相关推荐
我爱写代码i1 小时前
BeLink - 支持生成多种URL 缩短网址PHP源码
开发语言·php·短网址php源码
啊阿狸不会拉杆7 小时前
《计算机网络-自顶向下方法》5.7 网络管理、SNMP和NETCONF/YANG 读书笔记
开发语言·计算机网络·php
mjhcsp8 小时前
DeepSeek V4 Flash 0731 (Batch) 深度评测报告
log4j·php·batch
leoZ23110 小时前
第 8 篇:与 AI 协作的工作流 + 完整案例
前端·人工智能·神经网络·自然语言处理·性能优化·c#·php
qetfw10 小时前
Debian 部署 phpMyAdmin:Apache、PHP 与 MariaDB 管理界面配置
linux·debian·php·apache
AC赳赳老秦10 小时前
农产品公开数据应用:OpenClaw 抓取农产品价格、产销公开数据,实现农产品行情动态监测
java·c语言·javascript·python·php·deepseek·openclaw
三84411 小时前
redis三大机制:配置、持久化、主从复制(getshell 原理地基)
开发语言·php
G佳伟11 小时前
宝塔面板打不开且 Bt-Panel 未运行:从 HTTP 502 到 gevent 缺失的完整排查与修复
网络协议·http·php
名字还没想好☜12 小时前
Go 的 TCP 粘包与拆包:用长度前缀协议 + bufio 正确读消息
后端·tcp/ip·golang·go·php
kruptos1 天前
分布式系统怎么“选主“?Raft 共识一次讲清
开发语言·分布式·php·共识算法