是否可以在Windows操作系统中使用PHP exec()函数执行cmd命令?
我试过了:
<?php
try {
echo exec(
'O:\test\pdftk.exe O:\test\outputs\OPP\out.pdf O:\test\outputs\OPP\out2.pdf cat output O:\test\123.pdf'
);
} catch (Exception $e) {
echo $e->getMessage();
}
基本上,我正在尝试将两个pdf文件与pdftk程序合并。如果我只是手动将相同的命令写入cmd,它就可以工作并创建O:\ test \ 123.pdf文件。但是当我执行上面的PHP文件时,没有任何反应(空白页面,没有创建文件)。
答案 0 :(得分:2)
您的PHP用户可以访问cmd.exe吗?您可能会发现Microsoft's Sysinternals处的工具非常有用;特别是过程监控器。
答案 1 :(得分:1)
尝试转义目录分隔符:
exec("O:\\test\\pdftk.exe O:\\test\\outputs\\OPP\\out.pdf O:\\test\\outputs\\OPP\\out2.pdf cat output O:\\test\\123.pdf");
甚至更好,改为使用单引号:
exec('O:\test\pdftk.exe O:\test\outputs\OPP\out.pdf O:\test\outputs\OPP\out2.pdf cat output O:\test\123.pdf');
答案 2 :(得分:0)
这是一个允许PHP获取动态与真实cmd终端进行交互的项目。在此处获取:https://github.com/merlinthemagic/MTS
下载后,您只需使用以下代码:
//if you prefer Powershell, replace 'cmd' with 'powershell'
$shellObj = \MTS\Factories::getDevices()->getLocalHost()->getShell('cmd');
$strCmd1 = 'O:\\test\\pdftk.exe O:\\test\\outputs\\OPP\\out.pdf O:\\test\\outputs\\OPP\\out2.pdf cat output O:\\test\\123.pdf';
$return1 = $shellObj->exeCmd($strCmd1);
返回将为您提供命令返回或来自cmd的错误,就像您坐在控制台一样。此外,您可以针对$ shellObj发出任何您喜欢的命令,在PHP脚本的整个生命周期中都会维护该环境。因此,不是在脚本文件中捆绑命令,而是使用exeCmd()方法逐个发出命令,这样您也可以处理返回和任何异常。
答案 3 :(得分:-1)
尝试使用Admin Privileges for command prompt
执行