You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Windows Server 2019上配置PHP使其可执行XCOPY等外部命令

解决方案步骤

1. 确认PHP运行身份

首先通过以下代码获取PHP当前运行的系统账户,后续所有权限配置都针对该账户操作:

<?php
echo shell_exec('whoami');
?>

运行该页面后记下输出的账户名,IIS环境下一般为IIS APPPOOL\你的应用池名称,Apache环境下为Apache服务绑定的登录账户。

2. 配置系统可执行文件权限

Windows Server 2019对System32目录下的内置工具默认权限限制远高于2012,需要单独给PHP运行账户开放xcopy的执行权限:

  • 找到C:\Windows\System32\xcopy.exe,右键选择「属性」-「安全」,点击「编辑」添加刚才查到的PHP运行账户,勾选「读取和执行」权限后保存。
  • 如果你使用的是32位版本的PHP,还需要同时给C:\Windows\SysWOW64\xcopy.exe配置相同的权限。
  • 如果你后续还要调用PDF转换工具、自定义中间件,也按照同样逻辑给对应程序的exe文件添加PHP运行账户的读取和执行权限。

3. 修复COM组件调用权限

针对之前碰到的COM连接报错问题,按以下步骤配置:

  • 按下Win+R输入dcomcnfg打开组件服务管理器,依次展开「组件服务」-「计算机」-「我的电脑」-「DCOM配置」。
  • 找到对应Word的COM组件(名称一般为「Microsoft Word 97 - 2003 文档」,随Office版本略有差异),右键选择「属性」。
  • 切换到「安全」标签页,「启动和激活权限」「访问权限」「配置权限」三项都选择「自定义」,点击「编辑」添加PHP运行账户,分别授予本地启动、本地激活、本地访问权限。
  • 切换到「标识」标签页,选择「交互式用户」或者指定一个具备管理员权限的固定本地用户,不要使用默认的「启动用户」选项,Windows Server 2019默认限制服务上下文的COM跨进程调用。

4. 调整PHP配置与代码转义

  • 打开php.ini配置文件,查找disable_functions配置项,确认shell_exec、exec等执行函数没有被列入禁用列表,修改后重启PHP对应的服务(IIS应用池/Apache)。
  • 你的测试代码需要修正路径转义问题,Windows路径的反斜杠在PHP字符串中需要转义,正确写法如下:
$answer = shell_exec('xcopy /S /I /Q /Y /F "C:\\IN\\Word.docx" "C:\\OUT\\"');
echo $answer;

5. 额外安全策略调整

你已经禁用了UAC,还需要确认本地安全策略的对应配置:

  • 按下Win+R输入secpol.msc打开本地安全策略编辑器,依次展开「本地策略」-「安全选项」。
  • 找到策略项「用户账户控制:以管理员批准模式运行所有管理员」,设置为「已禁用」,重启服务器后生效。

内容的提问来源于stack exchange,提问作者user16674741

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:57:00