从PHP问题在Windows中执行cmd命令

时间:2010-06-23 08:15:09

标签: php windows command-line

是否可以在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文件时,没有任何反应(空白页面,没有创建文件)。

4 个答案:

答案 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

执行