我想写一个脚本,它可以调用一些代码,但在调用后继续运行。E.g
function foo()
{
$this->load_function_a();
$this->load_function_b();
echo 'A and B succesfully called';
}
我希望函数输出立即显示,而不是等待两个函数的处理完成。知道如何在PHP中实现这一点吗?
如果以后不想显示函数的输出,这是可能的。
<?php
ignore_user_abort(true);
header("Content-Length: 0");
flush();
do_your_work_here();
不使用Content-Length: 0
,您还可以打印真实的内容长度并输出一些内容。然后浏览器将看到它读取了所有内容(至少他认为是这样),并且脚本将继续运行。
您想要的是异步函数调用。PHP支持多线程,尽管您需要在服务器上安装PThreads扩展。我不太熟悉PHP中的多线程编程(在这种情况下更像.NET:P),但这个链接可能会对你有很大帮助:
p线程
在web环境中运行PHP通常不容易做到这一点。可能有各种"黑客"方法来实现这一点,但它们是不可靠的,例如在析构函数中调用函数,或使用register_shutdown_function()
事实上,简单的答案是:
function foo()
{
$this->load_function_a();
echo 'A succesfully called';
$this->load_function_b();
}
然而,我认为这不会在您的真实代码中满足您的需求。因此,要正确地解决这个问题,真正的答案是使用某种队列和队列处理器。例如:
- 让函数B对其功能进行排队,然后由cron作业进行处理
- 使用诸如RabbitMQ或Gearman之类的东西异步处理函数B的功能
希望这能有所帮助!