PHP exec命令阻止回显工作

时间:2018-11-20 19:54:41

标签: php apache raspberry-pi3

在此代码中:

session_write_close();
echo "reload";
flush();
//    exec("/etc/init.d/streaminit stop");
//    sleep(2);
//    session_write_close();
//    exec("/etc/init.d/streaminit start");
//    //all we have to do is copy currentView into nextView to trigger a page reload
//    sleep(2);

“ reload”的回显有效,但是如果未注释下面的行,则不会回显任何内容。我尝试了许多这种排列方式,结论是exec命令正在阻止echo正常工作。 我发现有一些关于exec导致Apache2出现问题的讨论,一个人说session_write_close()可以防止此问题。显然在这种情况下不是。是否有任何已知的修复程序?难道我做错了什么?

({streaminit是启动和停止mjpeg_streamer的shell脚本。这些shell命令是异步的(末尾为&

1 个答案:

答案 0 :(得分:2)

我终于在PHP exec的文档中找到了这一点:“如果程序使用此功能启动,为了使其在后台继续运行 (我强调),程序的输出必须重定向到文件或其他输出流。否则,将导致PHP挂起,直到程序执行结束。”解决方法:

exec("/etc/init.d/streaminit stop > /dev/null 2>&1 &”);

对于那些不熟悉的人(像我之前一样),这会将stdout设备重定向到/dev/null,而2>&1的意思是“将stderr输出发送到相同的设备放置为stdout。最后,&的意思是“在后台运行此命令”。