我使用shell_exec()来运行perl程序,通过要求用户输入一些值来完成任务需要一个多小时。我想将shell_exec()作为后台程序运行,并将摘要页面刷新回索引页面。我找到了一些建议,使用' 2> / dev / null&'但是,在shell_exec()的末尾,它在运行我的index.php时不起作用,它在等待符号的同一页面上停留。
如果有任何其他技巧来处理这种情况也会很棒。
有什么建议吗?
答案 0 :(得分:2)
你需要重新分配stdout以及stderr。
command >/dev/null 2>&1 &
>
用于将所有标准输出发送到/ dev / null。 2>
正在发送所有错误。 &1
表示将其发送到与标准输出相同的位置。
这也可以用于日志文件
command >>command.log 2>>&1 &
>>
会追加而不是覆盖。
答案 1 :(得分:0)
最后,我设法使用cgi而不是PHP来使system()相应地工作到欲望输出,这非常简单。我认为类似的解决方案可以在PHP中找到:
# fork this process
my $pid = fork();
die "Fork failed: $!" if !defined $pid;
if ($pid == 0) {
# do this in the child
open STDIN, "</dev/null";
open STDOUT, ">/dev/null";
open STDERR, ">/dev/null";
system("perl script.pl > output.log");
}
希望这会有用!