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



我想写一个脚本,它可以调用一些代码,但在调用后继续运行。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的功能

希望这能有所帮助!

最新更新