我正在寻找一个想法,在特定行为发生时触发执行php功能(在不同的目录中,经过测试并在同一目录中)。
系统是Debian和php框架yii。
使用API,我们从远程服务器接收新数据,并且对于我们收到的数据中的特定值,我需要在单独的过程中启动功能。无需等待其完成。 由于API响应时间我无法将此功能集成到其中,因此集成会破坏API,使其无法使用。
我已经阅读了Stackoverflow和许多其他示例的几十个答案。
对于测试我只是尝试在特定位置创建新文件夹并且没有创建文件(我认为是权限问题,但是如果从主代码 - 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"));
答案 0 :(得分:1)
您可以使用curl and its async funcionality制作单独的内部http请求。
或者您可以使用排队机制,其中一部分正在触发事件而另一部分正在消耗它。 RabbitMQ或Gearman可以为您执行此操作。