PHP return 后继续执行。

燧人氏 发布于 2015/05/13 21:13
阅读 3K+
收藏 0
PHP
现有一个需求,需要将所有请求发送到一统计系统。


我想把这一步操作放到所有操作的后面。


希望在这一步操作之前,就将需要返回的数据返回到屏幕。


除了ob_flush,还有其他方法么,听说有一个函数有这样的功能,没有找到。
加载中
1
eechen
eechen
PHP-FPM提供的函数fastcgi_finish_request可以冲刷(flush)所有响应的数据给客户端并结束请求.
这使得客户端结束连接后,能够继续执行需要大量时间运行的任务.
http://php.net/manual/zh/function.fastcgi-finish-request.php
http://www.laruence.com/2011/04/13/1991.html
<?php
echo '例子';
file_put_contents('log.txt', date('Y-m-d H:i:s') . " 上传视频\n", FILE_APPEND);
fastcgi_finish_request();
sleep(1);
file_put_contents('log.txt', date('Y-m-d H:i:s') . " 转换格式\n", FILE_APPEND);
sleep(1);
file_put_contents('log.txt', date('Y-m-d H:i:s') . " 提取图片\n", FILE_APPEND);
?>
代码里用sleep模拟一些耗时的操作,浏览时没有被堵塞,程序却都执行了,具体看日志.

2
leo108
leo108

fastcgi_finish_request

0
fly2xiang
fly2xiang

要使用fastcgi_finish_request首先你得使用FPM而不是Apache Module来运行PHP服务。

另外你可以用消息队列来异步实现你的需求。

0
爱上你爱的
爱上你爱的
register_shutdown_function
返回顶部
顶部