有人能告诉我如何从PHP脚本中执行.bat文件吗?
我尝试过:
exec("C:\[path to file]");
system("C:\[path to file]");
什么都没用。我查了PHP手册并在Google上搜索,但找不到一个好的答案。有人知道我错在哪里吗?
我正在运行Windows 2003服务器,并成功手动运行了.bat文件,它完成了我需要的工作;我只需要能够以编程方式启动它。
有人能告诉我如何从PHP脚本中执行.bat文件吗?
我尝试过:
exec("C:\[path to file]");
system("C:\[path to file]");
什么都没用。我查了PHP手册并在Google上搜索,但找不到一个好的答案。有人知道我错在哪里吗?
我正在运行Windows 2003服务器,并成功手动运行了.bat文件,它完成了我需要的工作;我只需要能够以编程方式启动它。
你可能需要通过 cmd
运行它,例如:
system("cmd /c C:[path to file]");
<?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
被执行,然后result
被存储以供以后使用。
PS: 它适用于Windows和Linux。
更多详细信息请参见http://www.php.net/manual/en/function.exec.php :)
<?php
pclose(popen("start /B test.bat", "r")); die();
?>
对于任何需要在后台运行程序“而无需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在“用户贡献笔记”部分中的注释)。
这段代码片段来自工作中的代码。
你不仅可以从Windows GUI或任务计划程序触发bat文件,还可以在需要时直接从PHP脚本中触发它。但在大多数情况下,它将根据您的PHP配置执行30-60秒。如果BAT文件中的作业很长,并且您不想冻结您的PHP脚本,则需要使用php.exe
将BAT作业分叉为另一个进程,并且不依赖于Apache。
这在Windows中以后台模式运行,作为Task Manager中的单独进程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