php - 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 命令是异步&
的(末尾带有))
解决方案
我终于在 PHP 的文档中找到了这一点exec
:“如果一个程序使用这个函数启动,为了让它继续在后台运行(我的重点),程序的输出必须重定向到一个文件或另一个输出流. 不这样做会导致 PHP 挂起,直到程序执行结束。” 修复:
exec("/etc/init.d/streaminit stop > /dev/null 2>&1 &”);
对于那些不熟悉的人(就像我直到一分钟前),这会将stdout
设备重定向到/dev/null
,并且2>&1
意味着“将stderr
输出发送到与 相同的位置stdout
。最后,&
意味着“在后台运行此命令”。有效!
推荐阅读
- android - 如何将图像从firebase显示到recyclerview?
- javascript - 使用 reactJs 从 jsonPlaceHolder 假数据中选择前 8 行
- php - 为什么不显示注销按钮?
- android - Android WorkManager 中的异步 Worker
- php - php删除带有类的标签及其内容
- android - 为什么我的应用程序在第一次打开时关闭但之后又可以使用?
- php - PHP RESTful PUT 方法和 multipart/form-data 的替代方案?
- java - 设计一个读取大量数据的 DAO
- excel - Msforms.Checkbox 是否同时指向单选按钮和复选框?
- docker-compose - Hyperledger ./startFabric.sh 无法为服务 peer0.org1.example.com 创建容器