我有两个文件,file_a.php
和file_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中管理类似的行为?
答案 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