如何从PHP运行.bat文件?
有人能告诉我如何从PHP脚本执行.bat文件吗 我试过:如何从PHP运行.bat文件?,php,system,exec,batch-file,Php,System,Exec,Batch File,有人能告诉我如何从PHP脚本执行.bat文件吗 我试过: exec("C:\[path to file]"); system("C:\[path to file]"); 什么都没用。我查阅了PHP手册并在谷歌上搜索了一下,但没有找到一个好的答案。有人知道我哪里出错了吗 我正在运行Windows2003Server,并且已经成功地手动运行了.bat文件,它完成了我所需要的工作;我只需要能够以编程方式启动它。您可能需要通过cmd运行它,例如: system("cmd /c C:[path to f
exec("C:\[path to file]");
system("C:\[path to file]");
什么都没用。我查阅了PHP手册并在谷歌上搜索了一下,但没有找到一个好的答案。有人知道我哪里出错了吗
我正在运行Windows2003Server,并且已经成功地手动运行了.bat文件,它完成了我所需要的工作;我只需要能够以编程方式启动它。您可能需要通过
cmd
运行它,例如:
system("cmd /c C:[path to file]");
在运行IIS 8的windows机器8上,我只需输入bats名称并忘记其路径,即可运行批处理文件。或者将bat放在c:\windows\system32中 不要问我它是如何工作的,但它确实如此。哈哈
$test=shell_exec(“C:\windows\system32\cmd.exe/C$streamnumX.bat”) 当您使用
exec()
函数时,就好像打开了cmd
终端,并直接向其键入命令。使用如下单引号(
$str=exec('start/B Path\to\batch.bat')
与
$str=exec('start/B/C command',$result')相反,/B
意味着bat将在后台执行,因此php的其余部分将在运行该行后继续运行代码>其中执行命令
,然后存储结果
,供以后使用
PS:它适用于Windows和Linux。
更多详细信息如下:)此代码段来自工作代码。
您不仅可以从Windows GUI或任务调度器触发bat文件,还可以在需要时直接从PHP脚本触发bat文件。但在大多数情况下,它的执行时间为30-60秒。取决于您的PHP配置。若BAT文件中的作业很长,并且您不想冻结PHP脚本,那个么您需要使用PHP.exe将BAT作业作为另一个进程进行分叉,而不需要依赖Apache
这在Windows中以后台模式运行,被视为任务管理器中的独立进程cmd.exe
和php.exe
,不会停止Apache php脚本。脚本生成的消息可以通过日志文件进行存储和检索
在我的例子中,在file\u scanner.php
中,我使用php函数sleep()
在循环中对大量文件进行了一些繁重的计算,这些文件可能会持续数小时,以避免CPU过载
成功poiner来自文件$r
,如果您想知道成功与否,可以通过ajax查询该文件。在我的例子中,file\u 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
对于任何需要在后台运行程序“而不是PHP等待它完成”的人,请执行以下操作:
其中,$cmd
是您需要运行的程序的字符串命令(例如,$cmd
可以等于notepad.exe
或节点路径\到\server.js
)
来源:(参见Arno van den Brink在标题为“用户贡献的笔记”一节中的笔记。)您的[文件路径]是什么样子的?出于某种原因,只需执行exec(“[filename here].bat”)就可以完美地工作,它只需执行文件。不需要“cmd/c[filename here]”。SYSTEM()也有一些很好的文档:如何将运行.bat文件的结果返回到PHP,以便检索所需的值?这只是分割字符串吗?@Stephen:要读取进程的输出,需要使用popen运行它。请参阅可能有人感兴趣的内容:在安装了locallay XAMP的windows系统上,此尝试可能会以超时结束,并且批处理永远不会执行。如果您已启动XAMP as服务,windows将使用类似以下内容作为用户:nt autorit“t\system,并且您已使用用户帐户登录。将该服务的所有者更改为您的本地用户帐户,它将正常工作。请参阅:了解更多信息information@Ole_S:你贴的链接坏了,你能解释一下怎么做吗?谢谢你愿意评论你的代码吗?如果很久以前有另一个被接受的答案,并且有好几次投票,你为什么要提出这个问题?当我需要“开始”在cmd中运行一个批处理时?太好了,我正在使用这个答案,但是页面一直在加载。你的代码对我来说很有用。我推荐这个谢谢。不一定需要C:\windows\system32\cmd.exe/C
/**
* 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));
}
@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit
pclose(popen("start /B ".$cmd, "r"));