在后台运行PHP脚本

时间:2012-01-17 17:08:44

标签: php

我正在测试一个在Debian的OS-X系统上开发的php脚本,它在那里表现不同。

为了重现它,我编写了两个脚本:parent.php和child.php:

parent.php:

#!/usr/bin/php
<?php

echo "parent started...\n";
shell_exec(__DIR__ . '/child.php &2>/dev/null &');
echo "parent finished.\n";

child.php:

#!/usr/bin/php
<?php

echo "child started...\n";
sleep(5);
echo "child finished.\n";

在OS-X上运行parent.php我立即返回两个输出行(父启动,父完成)。在Debian上,我得到“父母开始...”行,然后延迟5秒,然后“父母完成。”。运行“./child.php&amp; 2&gt; / dev / null&amp;”在shell中按预期立即回复提示。我有什么想法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

这是因为&2>部分。并非所有系统都支持它。也在每个shell(bash,sh,ksh等)中。

试试这个,

 exec("/bin/bash -c '/usr/bin/php /path/to/child.php 2> /dev/null' &");

如果要禁止所有输出,请使用

 exec("/bin/bash -c '/usr/bin/php /path/to/child.php &> /dev/null ' &");

BASH-HOWTO

刚刚测试过,exec("/usr/bin/php /path/to/child.php > /dev/null 2>&1 &")也应该有用。

答案 1 :(得分:2)

尝试使用exec()system()而不是shell_exec,也许shell_exec在不同的操作系统上具有相同的行为。