在背景执行PHP .bat文件(execute .bat file from php in back

2019-10-30 01:06发布

我尝试从PHP在后台执行.bat文件(在Windows Server与XAMPP)。 我上的按钮KLICK后,也应该去到另一个网站。 但是,当我点击按钮,浏览器正在等待脚本来完成。 晴这是在超时结束。

我的PHP代码:

if (isset($_POST['test']))
{
    exec('C:\Daten\test.bat');
    header("Location:test_status.php");
}

我怎么能告诉php的高管,以不等待?

我也试过以下,但不工作:

exec('C:\Daten\test.bat' . '> /dev/null &');

Answer 1:

感谢您的答复,但是这并没有为我工作。 我发现在互联网上,很多的解决思路,但没有为我工作。

现在我终于找到了解决办法! 关键字是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函数关闭它。 (批次仍在后台运行)之后,又打开另一个网站,在我的情况下,它是“查看当前状态”的网站。

如果你不想要一个日志,还可以输出(如MarkB前告知)与> NUL。 这看起来像:

$handle = popen ('start /B C:\Data\restart_TS3.bat >nul 2>&1', 'r');

并小心路径空的空间! 我不知道为什么,但是这是不行的:“开始/ B‘C:\ Data文件夹\ restart_TS3.bat’> NUL 2>&1”在你需要“之类的文件夹中的情况:

$handle = popen ('start /B C:\"Data Folder"\restart_TS3.bat >nul 2>&1', 'r');

这工作得很好,在文件夹名称空的空间。



Answer 2:

你使用的是Windows。 有没有/dev/null在Windows(这只是nul ),而且也没有&在后台运行的作业。 &在cmd.exe的是命令分隔符。 所以,你的exec()将挂起/等待.BAT来完成。

尝试

exec('start c:\daten\test.bat');

相反,这将启动批处理文件作为一个单独的进程。



Answer 3:

这为我工作。

exec("start cmd /c test.bat", $output);
var_dump($output);


文章来源: execute .bat file from php in background