【问题标题】:How to execute a php file in background from another php file如何从另一个php文件在后台执行一个php文件
【发布时间】:2019-06-23 22:40:14
【问题描述】:

我有两个文件,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(卷曲解决方案)

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 中的类似行为,我已经看到了一些专用库?

【问题讨论】:

  • 为什么需要运行这个后台进程?可以等待一个小时还是必须现在完成?好像你需要一个 cron 工作
  • 我想让使用 file_a.php 的用户免于等待直到 file_b.php 执行结束(在现实生活中的应用程序 file_b.php 会产生很长的执行时间,比如 4 或 5 秒,我需要对 file_a.php 的快速响应)

标签: php multithreading php-5.6


【解决方案1】:

创建一个文件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>";

shell 将读取 BASH 脚本,在后台运行 PHP 文件并立即返回到您的原始脚本。

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

【讨论】:

    猜你喜欢
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2018-09-20
    • 1970-01-01
    • 2015-03-11
    相关资源
    最近更新 更多