调用脚本并继续在PHP后台运行它?

调用脚本并继续在PHP后台运行它?,php,Php,我想写一个脚本,它调用一些代码,但在调用之后继续运行。 例如 我希望立即显示函数输出,而不是等待两个函数的处理完成。你知道如何在PHP中实现这一点吗?你想要的是异步函数调用。PHP支持多线程,尽管您需要在服务器上安装PThreads扩展。我不太熟悉PHP中的多线程编程(在这些情况下,更多的是.NET人员:P),但此链接可能会对您有很大帮助: 在web环境中运行PHP通常不容易做到这一点。实现这一点可能有各种“黑客”方法,但它们不可靠,例如在析构函数中调用函数,或使用register\u shut

我想写一个脚本,它调用一些代码,但在调用之后继续运行。 例如


我希望立即显示函数输出,而不是等待两个函数的处理完成。你知道如何在PHP中实现这一点吗?

你想要的是异步函数调用。PHP支持多线程,尽管您需要在服务器上安装PThreads扩展。我不太熟悉PHP中的多线程编程(在这些情况下,更多的是.NET人员:P),但此链接可能会对您有很大帮助:


在web环境中运行PHP通常不容易做到这一点。实现这一点可能有各种“黑客”方法,但它们不可靠,例如在析构函数中调用函数,或使用
register\u shutdown\u function()

实际上,简单的答案是:

function foo()
{
 $this->load_function_a();
 echo 'A succesfully called';
 $this->load_function_b();
}
然而,我假设这不能满足您在实际代码中的需要。所以要正确地解决这个问题,真正的答案是使用某种队列和队列处理器。例如:

  • 让函数B将其功能排队,然后由cron作业处理
  • 使用RabbitMQ或Gearman等工具异步处理函数B的功能

希望这有帮助

如果以后不想显示函数的输出,这是可能的

<?php
ignore_user_abort(true);
header("Content-Length: 0");
flush();
do_your_work_here();

Woo。。。我认为那是不可能的。。。也许你可以使用JavaScript和AJAX.可能的副本,除了在那里提出的选项之外,还考虑一个作业队列——Gearman或ReCK。注意,这仍然是最大执行时间。@克洛尼克:是的,我不关心输出,所以我需要在调用函数A之前调用它吗?这就是我在这里用
做你的工作
所表示的。请注意,这样的东西可以很容易地用于为您的Web服务器创建大量负载。
<?php
ignore_user_abort(true);
header("Content-Length: 0");
flush();
do_your_work_here();