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

从PHP问题在Windows中执行cmd命令,php,windows,command-line,Php,Windows,Command Line,是否可以使用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(); }

是否可以使用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();
}

尝试转义目录分隔符:

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.exe吗?你可能会发现这些工具非常有用;尤其是进程监视器。

尝试使用命令提示符的管理权限执行此项目,它允许PHP获取真实的cmd终端并与之动态交互。在这里获取:

下载后,您只需使用以下代码:

//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()方法逐个发出命令,这样您还可以处理返回和任何异常。

No。这不起作用。我还尝试了shell_exec(),但效果不太好。@Richard:即使如此,您仍需要正确地转义目录分隔符或使用单引号。您是否确保在您的配置中启用了
exec
shell\u exec
?@Richard Knop尝试一些更简单的方法,例如使用shell\u exec向文件写入一些文本,然后可能是其他错误,而不是php配置(即如果启用了exec),exec()已启用。我试过exec('ipconfig-all');和shell_exec(“ipconfig-all”);理查德:这说明你的命令有问题。尝试将数组传递给exec的第二个参数,然后
print\r
该数组。我认为是的。其他命令也可以。例如,如果我尝试exec('ipconfig-all'),它就会工作。我下载了进程监视器,似乎每个使用pdftk的进程都能正确执行。只有一个进程显示“缓冲区溢出”或类似的内容。如果打开cmd.exe并运行“O:\test\pdftk.exe O:\test\outputs\OPP\out.pdf O:\test\outputs\OPP\out2.pdf cat output O:\test\123.pdf”,您能否确认它是否按预期工作?是的。当我直接在shell中键入它时,它会按预期工作。