在后台从php执行.bat文件
我尝试在后台从php执行一个.bat文件(带有xampp的Windows服务器)。在我点击按钮后,它也应该转到另一个网站。 但当我点击按钮时,浏览器正在等待脚本完成。大多数情况下,这是以超时结束的 我的php代码:在后台从php执行.bat文件,php,windows,batch-file,background,cmd,Php,Windows,Batch File,Background,Cmd,我尝试在后台从php执行一个.bat文件(带有xampp的Windows服务器)。在我点击按钮后,它也应该转到另一个网站。 但当我点击按钮时,浏览器正在等待脚本完成。大多数情况下,这是以超时结束的 我的php代码: if (isset($_POST['test'])) { exec('C:\Daten\test.bat'); header("Location:test_status.php"); } 我如何告诉php执行者不要等待 我还尝试了以下操作,但不起作用: exec('
if (isset($_POST['test']))
{
exec('C:\Daten\test.bat');
header("Location:test_status.php");
}
我如何告诉php执行者不要等待
我还尝试了以下操作,但不起作用:
exec('C:\Daten\test.bat' . '> /dev/null &');
你正在使用Windows。Windows中没有
/dev/null
(它只是nul
),也没有&
在后台运行作业相反,它将作为一个单独的进程启动批处理文件 您正在使用Windows。Windows中没有
/dev/null
(它只是nul
),也没有&
在后台运行作业相反,它将作为一个单独的进程启动批处理文件 谢谢你的回复,但这对我来说不起作用。我在互联网上发现了很多解决方案,但对我来说什么都不管用
exec("start cmd /c test.bat", $output);
var_dump($output);
现在我终于找到了解决办法!
关键词是popen!这很好用:
$handle = popen ('start /B C:\Data\restart_TS3.bat > C:\Daten\restart_TS3.log 2>&1', 'r');
pclose ($handle);
header("Location:ts3_status.php");
这需要做以下工作:
popen打开启动批处理文件的后台进程,输出转到日志文件。
然后你需要用pclose关闭它。(批处理仍在后台运行)
之后,它会打开另一个网站,在我的例子中,它是一个“查看当前状态”的网站
如果不需要日志,还可以使用>nul输出(如MarkB之前所述)。这看起来是这样的:
$handle = popen ('start /B C:\Data\restart_TS3.bat >nul 2>&1', 'r');
$handle = popen ('start /B C:\"Data Folder"\restart_TS3.bat >nul 2>&1', 'r');
小心道路上的空隙!
我不知道为什么,但这不起作用:'start/B“C:\Data Folder\restart\u TS3.bat“>nul 2>&1”
在这种情况下,您需要在文件夹中输入“文件”,如下所示:
$handle = popen ('start /B C:\Data\restart_TS3.bat >nul 2>&1', 'r');
$handle = popen ('start /B C:\"Data Folder"\restart_TS3.bat >nul 2>&1', 'r');
这对文件夹名称中的空白空间很有效。谢谢您的回复,但这对我不起作用。我在互联网上找到了许多解决方案,但对我来说没有任何效果
exec("start cmd /c test.bat", $output);
var_dump($output);
现在我终于找到了解决办法!
关键字是popen!这很好用:
$handle = popen ('start /B C:\Data\restart_TS3.bat > C:\Daten\restart_TS3.log 2>&1', 'r');
pclose ($handle);
header("Location:ts3_status.php");
这需要做以下工作:
popen打开启动批处理文件的后台进程,输出转到日志文件。
然后您需要使用pclose关闭它。(批处理仍在后台运行)
之后,它会打开另一个网站,在我的例子中,它是一个“查看当前状态”的网站
如果不需要日志,还可以使用>nul输出(如MarkB之前所述)。如下所示:
$handle = popen ('start /B C:\Data\restart_TS3.bat >nul 2>&1', 'r');
$handle = popen ('start /B C:\"Data Folder"\restart_TS3.bat >nul 2>&1', 'r');
小心道路上的空隙!
我不知道为什么,但这不起作用:'start/B“C:\Data Folder\restart\u TS3.bat“>nul 2>&1”
在这种情况下,您需要在文件夹中输入“文件”,如下所示:
$handle = popen ('start /B C:\Data\restart_TS3.bat >nul 2>&1', 'r');
$handle = popen ('start /B C:\"Data Folder"\restart_TS3.bat >nul 2>&1', 'r');
这对文件夹名称中的空白很好。这对我来说很有效
exec("start cmd /c test.bat", $output);
var_dump($output);
这对我有用
exec("start cmd /c test.bat", $output);
var_dump($output);
您是否尝试过pclose(popen(“start/B”。$cmd,“r”)代码>??其中,
$cmd
是您要运行的命令。这可能会有帮助,您是否尝试过pclose(popen(“start/B”。$cmd,“r”)代码>??其中,$cmd
是您要运行的命令。这可能有助于对cmd.exe
工作方式与bash
不同的相关评论:-)不能保证调用cmd.exe
(在原始解决方案和此答案上)。PHP要求系统执行扩展名为.bat
的文件,系统代码查阅Windows注册表,发现.bat
文件被传递给某个命令解释器执行。默认情况下,它是Windows的cmd.exe
,但可以安装其他命令解释器,解释器可以将自己注册为执行.bat
文件的处理程序。关于cmd.exe
与bash
工作方式不同的好评论:-)不能保证调用cmd.exe
(关于原始解决方案和此答案).PHP要求系统执行扩展名为.bat
的文件,系统代码查阅Windows注册表,发现.bat
文件被传递给某个命令解释器执行。默认情况下,它是Windows'cmd.exe
,但可以安装其他命令解释器,解释器可以注册r本身就是执行.bat
文件的处理程序。答案很好。许多人不知道,在Windows中,在运行exec
时,必须在开头包含start
关键字。此外,如果希望exec
是异步的,只需在末尾添加&
。最好添加一个解释关于您在发布代码时试图实现的目标。回答得好。许多人不知道在Windows中,在运行exec
时必须在开始处包含start
关键字。此外,如果您希望exec
是异步的,只需在末尾添加&
。最好添加一个解释在发布代码时,您正在尝试实现。在尝试加载网络上的其他解决方案后-passthru、exec等…这终于成功了!感谢在尝试加载网络上的其他解决方案后-passthru、exec等…这终于成功了!谢谢