这是一个棘手的问题,在开发 php+ajax 应用程序时,我遇到了一些很长的查询,它们没有问题,但它们可以在后台完成。
我知道有一种方法可以只向用户发送回复,同时通过 exec() 将真正的处理交给另一个进程,但是我觉得这不合适,这可能会产生漏洞,而且实现它并不实用兼容虚拟服务器和跨平台。
PHP 提供了 ob_* 函数,虽然它们有助于刷新缓存,但用户将保持连接直到脚本运行。
我想知道在向用户发送数据并使用 apache 关闭连接/线程后,是否有替代 exec 的方法来保持脚本运行,或者是否有一种不太“脏”的方式将处理数据发送到另一个脚本。
最佳答案
我在网站上使用的是 Gearman .
Gearman 让您可以通过命令行在后台运行任务 worker 。这些工作人员监听某些任务的请求,然后在收到请求时处理它们。
在 Web 应用程序方面,我只是执行 $GEARMAN->doBackground("task_name","task_data");
,然后任务被发送给 worker,执行立即返回到脚本。
它比执行 exec
更安全,因为 gearman 任务作为 PHP 函数运行。
关于php - 如何在 php 中刷新数据并断开用户连接但保持脚本事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2842644/