php返回数据后如何让程序继续执行其它操作

news/2024/9/30 5:35:54

最近遇到一个需求,异步请求对一个慢查询的结果进行缓存,先返回缓存的结果,然后继续获取数据缓存下来。写个demo记录下

使用register_shutdown_function函数

register_shutdown_function — 注册在关闭时执行的函数

register_shutdown_function(callable $callbackmixed ...$args): void

注册一个 callback ,它会在脚本执行完成或者 exit() 后被调用。

<?phpclass Test
{public function test1($a, $b){sleep(4);echo 'test-1<br/>';file_put_contents('E:/code/files/test.txt', json_encode(compact('a', 'b')) . 'aaaaaa');}function test(){echo 'test<br/>';register_shutdown_function([$this, 'test1'], 2, 3);echo 'test end<br/>';return 2;}
}$t = new Test();
$res = $t->test();
var_dump($res);

 期望数据立即返回,而程序继续执行,然而实际上数据等全部程序执行完才返回

使用ob系列函数

<?phpclass Test
{public function test1($a, $b){sleep(4);echo 'test-1<br/>';file_put_contents('E:/code/files/test.txt', json_encode(compact('a', 'b')) . 'aaaaaa');}function test(){echo 'test<br/>';ob_end_clean();header("Connection: close");header("HTTP/1.1 200 OK");header("Content-Type: application/json;charset=utf-8");ob_start();echo json_encode(['a' => 1]);$size = ob_get_length();header("Content-Length: $size");ob_end_flush();flush();if (function_exists("fastcgi_finish_request")) {fastcgi_finish_request();}sleep(2);set_time_limit(0);$this->test1(2, 3);// register_shutdown_function([$this, 'test1'], 2, 3);echo 'test end<br/>';return 2;}
}$t = new Test();
$res = $t->test();
var_dump($res);

此时数据即刻返回,而程序仍然执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/45284.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Visual Instruction Tuning

目录概LLaVA代码Liu H., Li C., Wu Q. and Lee Y. J. Visual Instruction Tuning. NeurIPS, 2023.概 LLaVA. LLaVALLaVA 希望用 LLM 推理模态特征, 想法很简单:用 Vision Encoder 得到模态特征:\[\mathbf{Z}_v = g(\mathbf{X}_v). \] 用 Linear 投影:\[\mathbf{H}_v = \mathbf{…

如何从阿里云ECS迁移到AWS EC2?

随着云计算技术的迅速发展,众多跨国企业正在考虑将其工作负载迁移到AWS EC2,以获得更多的功能、灵活性和性能。在这个过程中,如何顺利迁移业务主机,并且保障迁移过程中业务的正常稳定访问,成为了一个具有挑战性的问题。九河云凭借丰富的多云迁移经验,借助AWS Application…

编程题目解析

编程题目解析 假设数据项定义如下: DATA1 DBHELLO!GOOD MORNING! DATA2 DB20DUP(?) 用串操作指令编写程序段,使其分别完成以下功能: (1)从左到右将DATA1中的字符串传送到DATA2中。 (2)传送完毕后,比较DATA1和DATA2中的内容是否相同:(3)把DATA1中的第3和第4字节装人AX。 (4)将A…

ASCII字符表和说明

ASCII,全称 American Standard Code for Information Interchange,即美国信息互换标准代码ASCII,全称 American Standard Code for Information Interchange,即美国信息互换标准代码,特点如下:一个字符用一个字节存储。 每个字节的最高位为 0,剩下的 7 位二进制数来对每…

构建vivo小游戏时出现npm install -g的解决方案

我通过Unity开发了一款游戏,我们使用Vivo官方的插件构建了webgl项目我们需要在vscode中使用node.js和npm进行打包成rpk文件,所以我们需要安装node和npm(现在下载node.js基本上都有集成了npm) PS:需要先下载Vivo的官方minigame插件,下载后可以使用npm run build调用该插件…

sort命令对文件内容排序

如下,有一个ip文件,需要对其进行排序处理,方便直观查看 解决办法:sort -n -t . -k1,1 -k2,2 -k3,3 -k4,4 ip.txt-n #表示按数值排序 -t . #表示以 . 号为分隔符,进行分段处理 -k1,1 -k2,2 -k3,3 -k4,4 #表示对ip地址以.号结尾进行4部分排序 ip.txt …

如何创建一个自己的npm包

一、注册npm账号 前往npm官网注册自己的npm账号(有了的可以省略这步) 注册注意事项(账号要拼音全小写的,密码需要十位以上,包含大小写字母、数字、特殊字符,有错误的话点击创建的时候最后他才会统一在页面的最上方显示错误) 二、本地建立一个文件 本地建立一个自己的npm包…

LVS负载均衡集群

目录1.负载均衡群集的原理(1)群集的含义(2)群集的类型(3)LVS负载均衡的三种工作模式(4)LVS调度算法2.LVS-NAT模式部署3.理解LVS-DR工作原理(1)LVS-DR数据包流向分析(2)LVS-DR中的ARP问题4.LVS-DR模式部署 1.负载均衡群集的原理(1)群集的含义 Cluster,集群、群集…