PHP 在单独的进程中调用函数

PHP call function in separate process

抱歉,文字太长了。

我正在寻找一个想法来触发执行 php 函数(在不同的目录中,测试并在同一目录中)当特定行为发生时。

系统是 Debian 和 php 框架 yii。

使用 API 我们从远程服务器接收新数据,对于接收到的数据中的特定值,我需要在单独的进程中启动函数。无需等待其完成。 因为 API 响应时间我无法将此功能集成到其中并且集成中断 API 使其无法使用。

我在 Whosebug 上阅读了数十个答案和许多其他示例。

为了测试,我只是尝试在特定位置创建新文件夹,但没有创建文件(我认为是权限问题,但无法确认,因为如果从主代码完成它就会成功 - api)。 它应该执行以下操作:

无法使用 pcntl_fork,因为它需要额外安装(不允许我这样做)。

涵盖的主题:

当然这种情况不包括使用include和require的可能。

无法发布 api 代码,但这是我要求它执行的操作:

background.php

$docs_dir='test_folder';
if (!file_exists('/var/www/created_documents/'.$docs_dir))
{
    mkdir('/var/www/created_documents/'.$docs_dir, 0777, true);
    chmod('/var/www/created_documents/'.$docs_dir, 0777);
}

它什么也不做。

我在 api 代码中使用的几个例子跳转到它(许多其他人在工作期间被删除)。

$proc = popen('php ' . __DIR__ . '/background.php &', 'r');
return $proc;
while (!feof($proc))
{
    $data = fgets($proc);
    var_dump($data);
}


exec("php background.php");


$cmd = "php background.php";
$timer = popen("start ". $cmd, "r");
pclose($timer);


exec($cmd . " > /dev/null &");
pclose(popen("php background.php &","r"));

您可以使用 curl and its async funcionality 发出单独的内部 http 请求。

或者您可以使用一种排队机制,其中一部分触发事件,另一部分使用它。 RabbitMQ or Gearman 可以为您做这件事。