当我登录到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框架中找到了一个更好的替代品,它很容易适应独立使用。