从CMD启动代码有效,但不是通过PHP exec脚本......为什么会这样?

时间:2014-05-08 15:47:23

标签: php windows cmd

当我登录Windows Server 2008并使用cmd.exe(作为管理员)运行此代码时,它可以正常工作:

php -f e:\path\to\file\file-name.php go 4001

但是,当我尝试从php文件启动它时,它不会:

$cmd = escapeshellarg("php -f e:\path\to\file\file-name.php go 4001");
exec($cmd);
exit; 

我已经工作了6个小时,找不到解决方案。我甚至尝试过使用pstools来访问psexec,但仍然没有运气。我甚至无法让命令行使用psexec,因为我似乎无法通过变量传递(go和4001)。

更新

当我使用PHP文件运行代码时,没有任何反应,我想要创建的文件没有被创建,我不知道如何通过这种方法抛出错误。

<?php
if(function_exists('exec')) {
    echo "exec is enabled";
}
?>

输出,exec已启用。

请帮忙!

1 个答案:

答案 0 :(得分:0)

  

我没有收到任何错误或警告。

嗯,你有这个:

exec($cmd);

function signature就是这样:

  

string exec ( string $command [, array &$output [, int &$return_var ]] )

更改代码以使用提供错误信息的可选参数。

在任何情况下,您都将完整的命令编码为单个参数。这不起作用:我在命令行中计算了5个不同的标记,而不是一个。您必须单独编码所有5个项目,并且需要为命令参数使用不同的功能。

此外,escapeshellarg()基本上是一个纯Unix的功能,修补得很差,因此在Windows上没有明显的安全问题,但它在Windows上无法正常工作,它通常会删除字符而不是逃避。我发现nicer replacement at the Symfony framework很容易适应独立使用。