关于系统:如何从PHP运行.bat文件?

How do you run a .bat file from PHP?

谁能告诉我如何从PHP脚本执行.bat文件?

我努力了:

1
2
exec("C:\[path to file]");
system("C:\[path to file]");

什么都没用。 我检查了PHP手册并在Google周围搜索,但找不到一个好的答案。 有人知道我要去哪里错吗?

我正在运行Windows 2003 Server,并且已成功手动运行.bat文件,它可以执行我需要的操作; 我只需要能够以编程方式启动它。


您可能需要通过cmd运行它,例如:

1
system("cmd /c C:[path to file]");


1
2
3
<?php
exec('c:\WINDOWS\system32\cmd.exe /c START C:\Program Files\VideoLAN\VLC\vlc.bat');
?>


当您使用exec()函数时,就好像您打开了cmd终端并直接在其中键入命令一样。
使用像这样的单引号 $str = exec('start /B Path\to\batch.bat'); /B表示蝙蝠将在后台执行,因此其余的php将在运行该行后继续执行,与 $str = exec('start /B /C command', $result); 相反,先执行command然后执行被存储以备后用。

PS:它适用于Windows和Linux。
更多详细信息在这里http://www.php.net/manual/zh/function.exec.php :)


1
2
3
<?php
 pclose(popen("start /B test.bat","r")); die();
?>


在运行IIS 8的Windows计算机8机器上,我可以通过输入bats名称并忘记其路径来运行批处理文件。或者将蝙蝠放在c: windows system32
不要问我它是如何工作的,但是它是有效的。大声笑

$ test = shell_exec(" C: windows system32 cmd.exe / c $ streamnumX.bat");


此代码段来自工作代码。

您不仅可以从Windows GUI或任务计划程序触发bat文件,还可以在需要时直接从PHP脚本触发。但是在大多数情况下,它会执行30-60秒。取决于您的PHP配置。如果BAT文件中的作业很长,并且您不想冻结PHP脚本,则需要使用php.exe将BAT作业作为另一个进程进行分叉,并且不能依赖Apache。

它在Windows中以后台模式运行,被视为任务管理器中的单独进程cmd.exephp.exe,不会停止Apache PHP脚本。您的脚本产生的消息可以通过日志文件进行存储和检索。

以我在file_scanner.php中的情况为例,我对大型文件循环进行了一些繁重的计算,而使用php函数sleep()可能会持续几个小时,而不会使CPU过载。

来自文件$r的成功提示结果,如果您想知道成功或失败的开始,可以通过ajax查询。在我的情况下,file_scanner.php用消息somefile.jpg - OK写入日志文件,您可以每隔几秒钟使用AJAX将其加载到UI中以显示进度。

的PHP

1
2
3
4
5
6
7
8
9
10
11
/**
 * Runs bat file in background mode
 *
 */

 function run_scanner() {

    $c='start /b D:\Web\example.com\tasks\file_scanner.bat';
    $r=pclose(popen($c, 'r'));
    return json_encode(array('result'=>$r));

 }

蝙蝠

1
2
3
@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit