PHP exec() 命令不工作

PHP exec() command not working

经过数小时的尝试和寻找答案后,我无法让它工作。

托管详细信息:

Windows 服务器 2012 R2

Plesk 12

IIS 8.5

问题

我的问题是: 我想在 PHP 中执行这个命令。在使用 PHP 脚本创建新用户后,该命令对于重新加载 filezilla 的配置是必需的。

C:\Program Files (x86)\FileZilla Server\FileZilla Server.exe /reload-config

当我直接在 CMD 中尝试时它确实有效。 但是在 PHP 中 if 不知何故不起作用。我尝试了很多东西,所以我会尝试把我尝试过的所有礼仪都给你。

我尝试通过以下方式做到这一点:

试验 1

$command = '"C:\Program Files (x86)\FileZilla Server\FileZilla Server.exe" /reload-config'; 
exec( $command, $output, $return); 

print_r($output);
echo '<br/>' .$return;

输出:

Array ( ) 
0

试验 2

$command = '"C:\Program Files (x86)\FileZilla Server\FileZilla Server.exe" /reload-config'; 
system( $command, $output); 

print_r($output);

输出:0

试炼 3

$command = 'C:\"Program Files (x86)\FileZilla Server\FileZilla Server.exe" /reload-config'; 
exec( $command, $output, $return); 

print_r($output);
echo '<br/>' .$return;

输出:0

试验 4(唯一 returns 错误!)

exec( 'C:\"Program Files (x86)\FileZilla Server\FileZilla Server.exe" /stop 2>&1', $output); 
print_r($output);

输出:

Array ( [0] => Toegang geweigerd. )

英文:

Array ( [0] => Access denied. )

特权:

几乎所有的遮阳篷都发现他们谈论的是特权。我做了以下特权:

将所有网络用户和 IUSR 权限授予 CMD.exe 和 FileZilla Server.exe, 并尝试将 IIS 身份验证从匿名设置为管理员帐户

有人说要试试这个:

echo '<pre>';
    system('set', $retval);
echo ' </pre>'; 

如果我这样做,我的输出是:http://pastebin.com/SjzeQpJ0

如果你们想要更多详情,请询问。我希望你们能帮我解决这个问题。我试图尽可能清楚。谢谢。

终于找到解决办法了!!


如果你遇到和我一样的问题,而你不知道如何解决这个问题,请按照以下步骤操作。

  1. 登录到您服务器的远程(如果您有权访问它)打开
  2. 打开 IIS 管理器
  3. Select -> 机器节点下的应用程序池节点(左面板)
  4. 右键单击所需的域名 -> 高级设置
  5. 滚动到流程模型 -> Id
  6. 点击 3 个点
  7. 选中“自定义帐户”单选按钮
  8. 填写一个可以访问的现有管理帐户 远程桌面,当然还有它的密码
  9. 按确定
  10. 现在转到 .exe 或任何您想通过 执行命令和
  11. 右键单击文件和select属性
  12. 转到安全选项卡
  13. Select 编辑
  14. 现在您可以完全使用您之前 select 注册的帐户。如果它是 未列出而不是通过单击添加手动添加

如果您已完成所有这些操作,现在应该可以使用了。

终于找到解决方法了!!


如果您遇到与我相同的问题,并且不知道如何解决,请按照以下步骤操作。
  1. 登录到您服务器的远程服务器(如果您有权访问它)
  2. 打开 IIS 管理器
  3. Select -> 机器节点下的应用程序池节点(左面板)
  4. 右键单击所需的域名 -> 高级设置
  5. 滚动到流程模型 -> 身份
  6. 点击 3 个点
  7. 选中“自定义帐户”单选按钮
  8. 填写一个可以访问的现有管理帐户 远程桌面,当然还有它的密码
  9. 按确定
  10. 现在转到 .exe 或任何您想通过 执行命令和
  11. 右键单击文件和select属性
  12. 转到安全选项卡
  13. Select 编辑
  14. 现在您可以完全使用您之前 select 编辑过的帐户。如果它是 未列出而不是通过单击添加手动添加

如果您已完成所有这些操作,现在应该可以使用了。

我通过使用上面的内容并探索了一些,找到了一种更安全的方法来做到这一点。您需要做的就是启用 "Load User Profile" 然后它将拥有普通用户分配的所有普通用户权限。只是让它像这样工作而不是授予管理权限:

  1. 登录到您服务器的远程(如果您有权访问它)
  2. 打开 IIS 管理器
  3. Select -> 机器节点下方的应用程序池节点(左面板)
  4. 右键单击所需的域名 -> 高级设置
  5. 滚动到流程模型 -> Id
  6. 设置加载用户配置文件 = True

正在工作!特别固定 Windows 2012 R2

  1. 转到 IIS
  2. 单击应用程序池
  3. Select 应用程序池 -> 高级设置
  4. 在弹出窗口下 -> 流程模型 -> 将加载用户配置文件设置为 TRUE
  5. 然后 -> 进程模型 -> 标识 -> 本地系统
  6. 这将充当当前用户

注意:如果当前对系统有高权限,这将是高风险的。