你如何从PHP运行.bat文件?

时间:2009-05-07 17:17:01

标签: php system exec batch-file

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

我试过了:

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

什么都没有用。我检查了PHP手册并用Google搜索,但找不到一个好的答案。谁知道我哪里出错了?

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

7 个答案:

答案 0 :(得分:51)

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

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

答案 1 :(得分:10)

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

答案 2 :(得分:8)

当您使用exec()功能时,就好像您打开了cmd端子并直接输入命令。

使用这样的单引号 $str = exec('start /B Path\to\batch.bat');
/B表示将在后台执行蝙蝠,因此 php 的其余部分将在运行该行后继续,如反对执行 $str = exec('start /B /C command', $result); 的{​​{1}},然后存储command供以后使用。

PS:适用于Windows和Linux。
更多详情请见http://www.php.net/manual/en/function.exec.php:)

答案 3 :(得分:7)

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

答案 4 :(得分:1)

在我的Windows机器8运行IIS 8的机器上我可以运行批处理文件,只需将bats名称和forgettig路径放入其中即可。或者将蝙蝠放在c:\ windows \ system32中 不要问我它是如何工作的但确实如此。 LOL

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

答案 5 :(得分:0)

此代码段来自有效代码。

不仅可以从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

/**
 * 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));

 }

BAT

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

答案 6 :(得分:0)

对于需要在后台运行程序而无需PHP等待其完成的任何人,请执行以下操作:

 pclose(popen("start /B ".$cmd, "r")); 

其中$cmd是您需要运行的程序的字符串命令(例如$cmd可以等于notepad.exenode Path\to\server.js)。

来源:https://www.php.net/manual/en/function.exec.php(请参阅“用户贡献的注释”部分中的Arno van den Brink的注释)。