PHP无法写入远程服务器目录,但文件资源管理器可正常读写
排查方向
- 检查PHP运行账户权限:Windows Server上IIS的PHP通常以IIS_IUSRS账户或应用程序池身份运行,而非你登录的管理员账户。手动操作是管理员权限,但PHP进程用的是服务账户,需给该账户分配共享目录的读写权限。可在IIS管理器查看应用程序池标识,再到共享目录的权限设置中添加该账户,赋予修改、写入权限。
- 验证SMB协议版本:Windows Server 2019默认SMB版本可能与Windows 10不同,比如SMBv1可能被禁用。可尝试在PHP代码中指定SMB版本,或调整新服务器SMB配置为兼容版本(优先用SMBv3),同时确认目标服务器允许新服务器的SMB连接。
- 检查UAC设置:Windows Server 2019的UAC默认更严格,即使管理员账户,进程也可能无完全权限。可尝试降低UAC级别测试,或给PHP运行账户赋予“绕过遍历检查”等高级权限。
- 确认共享路径格式:PHP中反斜杠需转义,代码里的路径应写成
\\\\server\\folder\\folder\\folder\\,旧服务器可能兼容未转义的写法,但新服务器可能解析严格。可先输出拼接后的实际路径,验证是否正确。 - 检查防火墙与安全组:Windows Server 2019防火墙可能默认阻止SMB端口(445、139等),或目标服务器防火墙限制新服务器访问。可临时关闭两边防火墙测试,或添加允许SMB通信的规则。
- 查看系统事件日志:在新服务器事件查看器中搜索“权限”“SMB”“PHP”相关错误日志,能找到更详细的拒绝原因,比如被拒绝的账户、具体缺失的权限项。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

