繁体   English   中英

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

[英]Call a script and continue running it in background in PHP?

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

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

我希望函数的输出立即显示,而不是等待两个函数的处理完成。 任何想法如何在PHP中实现这一目标?

您正在寻找的是异步函数调用。 PHP支持多线程,尽管您需要在服务器上安装PThreads扩展。 我对PHP的多线程编程不是很熟悉(在这种情况下,.NET专家更多的是:P),但是此链接可能会为您提供很多帮助:

并行线程

在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的功能。

希望这可以帮助!

如果您不希望以后再显示该函数的输出,则可以通过某种方式实现。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM