是否有可能执行cmd命令在Windows操作系统与PHP exec()函数?
我试过这个:
<?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,它就会起作用,并创buildO:\ test \ 123.pdf文件。 但是当我执行上面的PHP文件时,没有任何反应(空白页面,该文件没有创build)。
你的PHP用户可以访问cmd.exe吗? 你可能会发现微软的Sysinternals中的工具非常有用。 特别是过程监视器。
尝试转义目录分隔符:
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');
这是一个项目,允许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);
返回会给你命令返回OR错误从CMD,就好像你坐在控制台。 此外,您可以针对$ shellObj发出任何您喜欢的命令,该环境在PHP脚本的整个生命周期中都被维护。 因此,不要将命令绑定到脚本文件中,只需使用exeCmd()方法一个一个地发出它们,这样您也可以处理返回和任何异常。
尝试使用管理权限执行命令提示符