我尝试在 PHP 中使用 exec 命令执行批处理文件。我只是这样使用它:
$filename = 'test.bat';
exec($filename);
但没有得到任何输出。我用另一个命令尝试了这个函数,它工作正常。您的建议将不胜感激。谢谢
主要问题是path
和permission
。我已经得到了要执行的批处理文件。
这是我的解决方案:
-
我从 php 文件所在的同一文件夹中运行我的批处理文件。
exec("mybatch.bat");
-
我确保 Apache 服务有足够的权限来运行批处理文件。只是为了测试,我使用了Apache的管理员帐户来登录。
在Windows服务器上注意引号。这对我有用:
system('cmd.exe /c C:'myfolder'_batches'run_this_batch.bat');
system("cmd /c C:[path to file]");
正如"里奇欣德尔"在类似话题中所说。
或尝试
exec("cmd.exe /c test.bat") ?
如果您需要执行命令并将命令中的所有数据直接传回而不会受到任何干扰,请使用 passthru() 函数。
http://md1.php.net/manual/en/function.passthru.php
我所做的如下:
-
创建了一个包含以下内容的 PHP 文件:
$gotIt = array(); $file = "getMyIP.bat"; exec( $file, $gotIt ); echo implode("<br>",$gotIt);
-
在同一文件夹中创建了批处理文件
@ECHO off ipconfig
-
运行它并等待防火墙跳过整个操作。
然后我得到了一个输出,如下所示:
Windows IP Configuration
PPP adapter 3 USB Modem:
Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : ***.***.202.81
Subnet Mask . . . . . . . . . . . : 255.255.255.255
Default Gateway . . . . . . . . . : ***.***.202.81
只有 *** 所在的数字
正如 exec 文档中所解释的那样:
echo exec($filename);
或
exec($filename, $output);
echo $output;