Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 运行批处理文件的exec/popen正在后台打开程序,无法正常启动_Php_Windows_Batch File_Xampp_Popen - Fatal编程技术网

Php 运行批处理文件的exec/popen正在后台打开程序,无法正常启动

Php 运行批处理文件的exec/popen正在后台打开程序,无法正常启动,php,windows,batch-file,xampp,popen,Php,Windows,Batch File,Xampp,Popen,我不知道这是php问题还是Windows问题。我在Windows10中 我已经安装了xampp,并且正在使用web浏览器运行自定义构建的媒体库 我对它进行了设置,这样当我点击播放视频时,php会执行一个批处理文件(动态创建),以全屏方式在VLC中打开视频 我也有它,所以,在浏览器中,你可以点击一个图标,它将执行一个批处理文件,打开explorer.exe中的视频位置 这两台机器在两天多的时间里都运转良好。但今天,它停止了工作,特别是在我们断电(关闭电脑)5秒钟后,由于暴风雨 现在的行为是:资源管

我不知道这是php问题还是Windows问题。我在Windows10中

我已经安装了xampp,并且正在使用web浏览器运行自定义构建的媒体库

我对它进行了设置,这样当我点击播放视频时,php会执行一个批处理文件(动态创建),以全屏方式在VLC中打开视频

我也有它,所以,在浏览器中,你可以点击一个图标,它将执行一个批处理文件,打开explorer.exe中的视频位置

这两台机器在两天多的时间里都运转良好。但今天,它停止了工作,特别是在我们断电(关闭电脑)5秒钟后,由于暴风雨

现在的行为是:资源管理器窗口函数从不打开窗口,并且
popen
命令超时并出现致命错误:超过了最大执行时间。而今天早些时候,它立即起了作用

VLC问题更奇怪。它没有超时。ajax响应立即返回,它确实开始在VLC中播放视频,但是(!!),VLC从未真正打开(现在);它只是在后台播放视频中的音频。我必须去找任务管理器来阻止它,因为VLC(显然)不会启动

同样,这两个函数都工作得很好,从我第一次编写函数开始,一直到今天短暂的断电问题,都没有问题

所以,我认为这不是php的问题,但可能是一些Windows的东西被破坏了,阻止了正常的行为

请注意,如果我直接单击批处理文件,它们会正常工作(打开资源管理器窗口或以全屏模式打开VLC)。当我用
popen
执行批处理文件时,奇怪的事情发生了

我的代码是这样的:

JS:

PHP:

下面是bg_exec函数:

public static function bg_exec($cmd)
{ 
    pclose(popen($cmd, "r"));
    return;
} 
如果我同时使用
shell\u exec
exec
也会出现同样的问题,而在关闭电脑之前,所有三个功能(shell\u exec、exec或popen)都正常工作

更新

我尝试从等式中删除批处理文件,只是直接将命令运行到
shell\u exec
,如下所示:

chdir('C:\Program Files (x86)\VideoLAN\VLC');
shell_exec("start vlc -f \"$media\" exit");
仍然在做同样的事情:VLC进程启动,音频开始从视频文件播放,但VLC的应用程序从未明显启动,我必须在Task Manager中关闭该进程

因此,这不是批处理文件问题(通过dbl直接运行批处理文件,单击它就可以了)。每当我尝试从php启动一个程序时,它只在后台打开(explorer或VLC)

我刚刚完成了系统文件检查。没有发现任何腐败行为


一直工作到今晚5点。我疯了

问题与意外重新启动或类似事件无关

我已将Apache更改为作为web服务运行,当它作为web服务运行时,不允许它与桌面gui交互(即使选中允许Apache服务与桌面交互的复选框)


因此,手动运行apache而不是作为服务来解决这个问题。完全如果我知道如何在作为服务运行时让它工作,我会回来的

问题与意外重新启动或类似事件无关

我已将Apache更改为作为web服务运行,当它作为web服务运行时,不允许它与桌面gui交互(即使选中允许Apache服务与桌面交互的复选框)


因此,手动运行apache而不是作为服务来解决这个问题。完全如果我知道如何在作为服务运行时让它工作,我会回来的

您可能想考虑留下一个在登录时启动的小型VLC处理程序,PHP脚本可以将其打开。在unix或linux系统中,我建议使用shell脚本,使用
tail-f
监视日志文件的输出,但我知道没有与该策略等效的批处理。。。除非你想运行像Cygwin这样的东西,让你的自动化更容易!您可能想考虑留下一个在登录时启动的小型VLC处理程序,PHP脚本可以将其打开。在unix或linux系统中,我建议使用shell脚本,使用
tail-f
监视日志文件的输出,但我知道没有与该策略等效的批处理。。。除非你想运行像Cygwin这样的东西,让你的自动化更容易!
public static function bg_exec($cmd)
{ 
    pclose(popen($cmd, "r"));
    return;
} 
chdir('C:\Program Files (x86)\VideoLAN\VLC');
shell_exec("start vlc -f \"$media\" exit");