如何在后台从另一个php文件执行PHP文件

时间:2019-01-30 15:34:44

标签: php multithreading php-5.6

我有两个文件,file_a.phpfile_b.php。在文件file_a.php中,我试图将file_b.php作为“后台进程”执行。我尝试了两种在stackoverflow上找到的方法,但是我无法使其工作:

file_a.php(执行解决方案)

echo "Start ".time()."<br>";
exec("php -f /Path/to/file/file_b.php /dev/null &");
echo "End ".time()."<br>";

file_a.php(curl解决方案)

echo "Start ".time()."<br>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://192.168.1.1:8888/file/file_b.php');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1);
curl_exec($ch);
curl_close($ch);
echo "End ".time()."<br>";

file_b.php(延迟5秒并发送示例邮件)

set_time_limit(5);//setting five seconds delay
for ($i = 0; $i < 4; ++$i) {

    sleep(1);
}

// the message
$msg = "line of text";
// send email
mail("testmail@test.io","My subject",$msg)

我正试图调用file_a.php并执行file_b.php,而不必等待file_a.php中的5秒钟,这完全是作为后台进程。 在我看到一些专用库的PHP 7之前,有一种方法可以在PHP中管理类似的行为?

1 个答案:

答案 0 :(得分:0)

创建具有以下内容的文件 background.sh

#!/bin/bash

/usr/bin/php -f /Path/to/file/file_b.php &

然后使用第一个方法调用它

echo "Start ".time()."<br>";
exec("/bin/bash background.sh");
echo "End ".time()."<br>";

外壳程序将读取BASH脚本,在后台运行PHP文件,然后立即返回原始脚本。

更强大的解决方案是使用某些队列系统,例如PHP-Resque