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文件,它可以执行我需要的操作; 我只需要能够以编程方式启动它。
-
您的[文件路径]是什么样的?
-
由于某种原因,仅执行exec(" [此处的文件名] .bat")即可,它只是执行文件。 不需要" cmd / c [此处为文件名]"。
您可能需要通过cmd运行它,例如:
1
| system("cmd /c C:[path to file]"); |
-
还有一些有关SYSTEM()的出色文档:us3.php.net/system
-
我怎样才能将运行.bat文件的结果返回到PHP,以便可以检索到我需要的值-这仅仅是切片字符串吗?
-
@Stephen:要读取过程的输出,需要使用popen运行它。参见uk3.php.net/popen
-
嗯,此解决方案给我一个"访问被拒绝"错误...
-
可能对某些人很有趣:在装有locallay的XAMP的Windows系统上,这种尝试可能会超时,并且永远不会执行该批处理。如果您已启动XAMP作为服务窗口,则该窗口将以以下用户身份使用:nt-autorit?t system,并且您已使用用户帐户登录。将服务的所有者更改为您的本地用户帐户,它将起作用。请参阅:forums.devshed.com/php-development-5/了解更多信息
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 :)
-
很棒,我正在使用<?php excec(c: Windows system32 cmd.exe / c Start path / batch.bat)?>此代码有效,但页面仍在加载。您的代码行像魅力一样为我工作。 <?php exec(start / B Path to batch.bat)?>我建议这样做
-
想要注释您的代码吗?如果很久以前还有另一个被接受并有几次投票的答案,您为什么要提出这个建议?
-
这个工作谢谢
在运行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.exe和php.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 |