有谁能告诉我如何从PHP脚本执行.bat文件?
我试过了:
exec("C:\[path to file]");
system("C:\[path to file]");
什么都没有用。我检查了PHP手册并用Google搜索,但找不到一个好的答案。谁知道我哪里出错了?
我正在运行Windows 2003 Server并成功手动运行.bat文件,它可以满足我的需要;我只需要能够以编程方式启动它。
答案 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.exe
和php.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.exe
或node Path\to\server.js
)。
来源:https://www.php.net/manual/en/function.exec.php(请参阅“用户贡献的注释”部分中的Arno van den Brink的注释)。