首页 > 解决方案 > PHP exec 命令阻止 echo 工作

问题描述

在这段代码中:

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);

“重新加载”的回声有效,但如果它下面的行未注释,则不会回显任何内容。我已经尝试了很多这种排列,结论是该exec命令正在阻止echo工作。我发现了一些关于exec导致 Apache2 出现问题的讨论,一个人说这session_write_close()可能会阻止这个问题。显然在这种情况下它没有。是否有任何已知的修复方法?难道我做错了什么?

streaminit是一个启动和停止的 shell 脚本mjpeg_streamer。shell 命令是异步&的(末尾带有))

标签: phpapacheraspberry-pi3

解决方案


我终于在 PHP 的文档中找到了这一点exec:“如果一个程序使用这个函数启动,为了让它继续在后台运行(我的重点),程序的输出必须重定向到一个文件或另一个输出流. 不这样做会导致 PHP 挂起,直到程序执行结束。” 修复:

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

对于那些不熟悉的人(就像我直到一分钟前),这会将stdout设备重定向到/dev/null,并且2>&1意味着“将stderr输出发送到与 相同的位置stdout。最后,&意味着“在后台运行此命令”。有效!


推荐阅读