我正在测试在 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 秒,然后是“父级完成”。在 shell 中运行“./child.php &2>/dev/null &”会按预期立即返回提示。有什么办法可以解决这个问题吗?
最佳答案
这是因为&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 ' &");
刚刚测试过,exec("/usr/bin/php/path/to/child.php >/dev/null 2>&1 &")
应该也能工作。
关于php - 在后台运行 PHP 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8898750/