我在Windows 10上运行xampp,在localhost的Web浏览器环境中编写个人媒体浏览器。我正在使用shell_exec()
打开VLC Media Player并开始播放给定的视频文件。
首先,我直接在shell_exec()中执行了vlc命令,如:
shell_exec('vlc -f "path/to/file.mp4"');
它可以正常工作,打开VLC(就像从网络浏览器一样),以全屏方式自动播放视频文件。
问题是,只要VLC打开,它就会一直运行脚本。
为了试图解决这个问题,我想我会通过创建批处理文件来实现。
现在,在浏览器中单击文件后,我将ajax运行到服务器并将临时runvlc.bat
文件写入当前脚本目录,然后使用shell_exec
执行批处理文件,自动关闭命令提示符。我原本以为这会解决运行脚本一样长的VLC问题,因为shell_exec
只打开退出自身的批处理文件。
然而,这并没有解决问题。 30秒后,我仍然收到来自服务器的致命错误(最长执行时间)响应。它并没有真正伤害任何东西,但我想解决这个问题。
我记得在某个地方读过有一种方法可以将执行关闭,以便php可以继续,但我再也找不到了。
这就是代码目前在服务器端的样子:
private function test()
{
$dir = getcwd();
$batch = 'runvlc.bat';
$handle = fopen($batch, 'w');
$media = "file:///C:/mymovie.mp4";
$data =
"CD
CD C:\Program Files (x86)\VideoLAN\VLC
start vlc -f --volume 75 \"$media\"
exit";
fwrite($handle, $data);
fclose($handle);
$line = '"'.$dir.'\'.$batch.'"';
shell_exec($line);
return $this->response(array('status'=>'success'));
}
如何将执行与VLC的状态分离为开放/运行?
答案 0 :(得分:1)
尝试使用此功能运行您的bat文件:
这将在后台执行$ cmd(没有cmd窗口)而没有PHP等待它完成
public function bgExec($cmd) {
pclose(popen($cmd, "r"));
}
private function test()
{
$dir = getcwd();
$batch = 'runvlc.bat';
$handle = fopen($batch, 'w');
$media = "file:///C:/mymovie.mp4";
$data =
"CD
CD C:\Program Files (x86)\VideoLAN\VLC
start vlc -f --volume 75 \"$media\"
exit";
fwrite($handle, $data);
fclose($handle);
$line = '"'.$dir.'\'.$batch.'"';
$this->bgExec($line);
return $this->response(array('status'=>'success'));
}