在此代码中:
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命令是异步的(末尾为&
)
答案 0 :(得分:2)
我终于在PHP exec
的文档中找到了这一点:“如果程序使用此功能启动,为了使其在后台继续运行 (我强调),程序的输出必须重定向到文件或其他输出流。否则,将导致PHP挂起,直到程序执行结束。”解决方法:
exec("/etc/init.d/streaminit stop > /dev/null 2>&1 &”);
对于那些不熟悉的人(像我之前一样),这会将stdout
设备重定向到/dev/null
,而2>&1
的意思是“将stderr
输出发送到相同的设备放置为stdout
。最后,&
的意思是“在后台运行此命令”。