使用 shell_exec 打开视频文件导致最大执行时间致命错误
using shell_exec to open video file causes max execution time fatal error
我 运行ning xampp 在 Windows 10,在本地主机的 Web 浏览器环境中编写个人媒体浏览器。我正在使用 shell_exec()
打开 VLC 媒体播放器并开始播放给定的视频文件。
一开始我直接在shell_exec()中执行了vlc命令,如:
shell_exec('vlc -f "path/to/file.mp4"');
它正常工作,打开 VLC(就像从网络浏览器中一样),全屏自动播放视频文件。
问题是,只要 VLC 打开,它就会一直 运行ning 脚本。
为了尝试解决这个问题,我想我会通过创建一个批处理文件来做到这一点。
所以现在,在浏览器中点击一个文件,我 运行 ajax 到服务器并将临时 runvlc.bat
文件写入当前脚本目录,然后使用 shell_exec
执行批处理文件并自动关闭命令提示符。我原以为这会解决 运行ning-script-as-long-as-VLC-is-open 问题,因为 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 的状态分离为 open/running?
尝试运行你的bat文件使用这个函数:
这将在后台执行 $cmd(无 cmd window)而无需 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'));
}
我 运行ning xampp 在 Windows 10,在本地主机的 Web 浏览器环境中编写个人媒体浏览器。我正在使用 shell_exec()
打开 VLC 媒体播放器并开始播放给定的视频文件。
一开始我直接在shell_exec()中执行了vlc命令,如:
shell_exec('vlc -f "path/to/file.mp4"');
它正常工作,打开 VLC(就像从网络浏览器中一样),全屏自动播放视频文件。
问题是,只要 VLC 打开,它就会一直 运行ning 脚本。
为了尝试解决这个问题,我想我会通过创建一个批处理文件来做到这一点。
所以现在,在浏览器中点击一个文件,我 运行 ajax 到服务器并将临时 runvlc.bat
文件写入当前脚本目录,然后使用 shell_exec
执行批处理文件并自动关闭命令提示符。我原以为这会解决 运行ning-script-as-long-as-VLC-is-open 问题,因为 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 的状态分离为 open/running?
尝试运行你的bat文件使用这个函数:
这将在后台执行 $cmd(无 cmd window)而无需 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'));
}