当我登录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已启用。
请帮忙!
答案 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很容易适应独立使用。