使用 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')); 
}