从CMD启动代码工作,但不是通过PHP执行脚本.这是为什么?


Launching code from CMD works, but not through a PHP exec script... why is this?

当我登录到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个小时了,还是找不到解决办法。我甚至试过用手枪进入psexec,但还是没有成功。我甚至不能让psexec从命令行工作,因为我似乎无法通过(go和4001)传递变量。

当我使用PHP文件运行代码时,什么都没有发生,我想要创建的文件没有被创建,我不确定如何通过这个方法抛出错误。

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

输出,exec是启用的

请帮忙!

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

嗯,你有这个:

exec($cmd);

函数签名是这样的:

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

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

在任何情况下,您都将整个命令编码为单个参数。这行不通:我在命令行中计数了5个不同的令牌,而不是一个。您必须分别对所有5项进行编码,并且需要对命令参数使用不同的函数。

此外,escapeshellarg()基本上是一个只有unix的功能,已经打了很差的补丁,所以它在Windows上没有明显的安全问题,但它在Windows上不能正常工作,它经常会剥离字符而不是转义。我在Symfony框架中找到了一个更好的替代品,它很容易适应独立使用。