代码之家  ›  专栏  ›  技术社区  ›  Richard Knop

从PHP版本在Windows中执行命令

  •  1
  • Richard Knop  · 技术社区  · 14 年前

    是否可以使用php exec()函数在Windows操作系统中执行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();
    }
    

    基本上,我正在尝试用pdftk程序合并两个pdf文件。如果我只是手工将相同的命令写入cmd,它就会工作,并且会创建o:\test\123.pdf文件。但是当我执行上面的PHP文件时,什么都不会发生(空白页,文件不会被创建)。

    4 回复  |  直到 8 年前
        1
  •  2
  •   Andy    14 年前

    您的PHP用户可以访问cmd.exe吗?您可以在以下位置找到工具: Microsoft's Sysinternals 非常有用,特别是过程监视器。

        2
  •  1
  •   Andy E    14 年前

    尝试转义目录分隔符:

    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');
    
        3
  •  0
  •   MerlinTheMagic    8 年前

    下面是一个允许PHP获取真实的命令终端并与之动态交互的项目。在这里得到: 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()方法逐个发出命令,这样您还可以处理返回和任何异常。

        4
  •  -1
  •   Someone    14 年前

    尝试使用命令提示的管理员权限执行