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

时间:2015-02-07 13:17:19

标签: php

我想编写一个调用某些代码但在调用后继续运行的脚本。 E.g

function foo()
{
 $this->load_function_a();
 $this->load_function_b();
 echo 'A and B succesfully called';
}

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

3 个答案:

答案 0 :(得分:0)

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

PThreads

答案 1 :(得分:0)

在Web环境中运行PHP时,这通常不容易实现。可能有各种各样的" hacky"实现此目的的方法,但它们将是不可靠的,例如在析构函数中调用函数,或使用register_shutdown_function()

实际上,简单的答案是:

function foo()
{
 $this->load_function_a();
 echo 'A succesfully called';
 $this->load_function_b();
}

但是,我认为这不会满足您在实际代码中的需求。所以要正确解决这个问题,真正的答案是使用某种队列和队列处理器。例如:

  • 让功能B对其功能进行排队,然后由cron作业处理。
  • 使用RabbitMQ或Gearman之类的东西来异步处理功能B的功能。

希望这有帮助!

答案 2 :(得分:0)

如果你不想在以后显示函数的输出,这在某种程度上是可能的。

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

您可以打印实际内容长度并输出内容,而不是使用Content-Length: 0。然后,浏览器会看到它读取所有内容(至少他认为是这样),并且您的脚本将继续运行。