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();
相关推荐
IM架构师14 小时前
# 一次老旧PHPCMS网站入侵排查:从SQL注入到PHP后门,以及IP白名单止血
sql·tcp/ip·php
码途行者15 小时前
处理超时未支付订单:两套轻量化方案,附 PHP 极简实现
开发语言·redis·php
vx_Biye_Design15 小时前
PHP中医养生馆预约系统60841-计算机课程设计、毕业设计
vue.js·spring boot·后端·mysql·php·课程设计·express
.Bryce.17 小时前
你了解 Blackboard(黑板系统)吗?听说过基于黑板系统实现的智能体吗?
java·网络·gpt·php·agent·codex·黑板系统
yu_zhidun1 天前
企业电脑监控软件怎么选:别只看功能清单,先看这 6 个底层能力
开发语言·电脑·php·域智盾系统
李纲明1 天前
WordPress 白屏排查手册:关插件、换主题、开调试、查 PHP(附停手信号)
开发语言·php·wordpress·故障排查·白屏·插件冲突
天远API1 天前
零信任架构实战:基于天远公安二要素政务版构建自动化不动产交易与契税核算实名核实网关
人工智能·架构·自动化·php
WeiXin_DZbishe1 天前
基于springboot装修风格选择系统的设计与开发-计算机毕设【课程设计】77964
java·vue.js·spring boot·后端·python·php·课程设计
anew___1 天前
《从零手写操作系统 (49):虚拟内存进阶——Demand Paging、Swap与缺页异常处理》
linux·服务器·php
misty youth1 天前
Navicat与PHPstudy小皮
mysql·adb·php·navicat