PHP exec()实时锁定但不是本地

时间:2018-01-29 15:55:14

标签: php linux raspberry-pi omxplayer

我有一个覆盆子pi,我正试图通过网络应用程序上的控件制作显示视频。我按照here描述的方式使用omxplayer。我的PHP问题文件只包含此行(已修改用于测试):

exec("/home/pi/master/playmovie.sh test.mp4");

引用文件/home/pi/master/playmovie.sh:

omxplayer -o hdmi /home/pi/Videos/$1 < /home/pi/master/cmd > /dev/null &
echo . > /home/pi/master/cmd

当我通过putty在本地执行这个php文件或命令本身时,一切正常,但当我尝试通过网络执行它时,它会锁定并且电影永远不会启动。

重要的:

  • playmovie.sh具有执行权限
  • master / cmd具有777权限
  • 写入master / cmd并执行其他脚本在本地和在线通过php
  • 都可以正常工作
  • 来自php在线我可以执行omxplayer -hls -l /home/pi/Videos/test.mp4echo -n p > /home/pi/master/cmd所以它肯定会认出那些都是有效的。

我觉得自己很疯狂,这是我在这个项目上需要做的最后一件事,让它变得有用,请帮助!!

1 个答案:

答案 0 :(得分:0)

我的猜测是因为你的实际exec命令不能处理stdout,stderr和stdin。从命令行调用时,PHP没有输出缓冲区,但是从浏览器开始。

听起来它正在获得一些输出,然后等待脚本完成执行并最终超时,因此它似乎什么都不做。

如果你使用nohup会怎样?

exec("nohup /home/pi/master/playmovie.sh test.mp4 &");