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

Windows环境下PHP访问网络共享文件夹提示mkdir()权限被拒绝如何解决?

解决方案

该问题的根本原因是Windows环境下PHP运行时使用的服务账户默认无SMB网络共享的访问权限,且映射盘符为用户会话级资源,服务账户默认无法读取用户登录时创建的映射盘,可按以下步骤逐一排查解决:

  • 第一步:确认PHP运行身份
    新建测试文件运行如下代码,获取PHP实际运行的Windows账户名:
    <?php
    echo exec('whoami');
    ?>
    
  • 第二步:配置共享文件夹权限
    前往SMB共享文件夹所在的主机,依次配置两处权限:
    1. 右键目标文件夹→【属性】→【共享】→【高级共享】→【权限】,添加第一步查到的PHP运行账户,授予修改、读取、写入权限
    2. 切换到【安全】选项卡,同样添加该PHP运行账户,授予修改、读取、写入、列出文件夹内容的NTFS权限
  • 第三步:优先使用UNC路径替代映射盘符
    Windows系统中映射的盘符属于登录用户的会话专属资源,PHP服务运行在独立会话中无法识别用户手动映射的Z盘等盘符,建议直接使用\\192.168.1.1\File\格式的UNC路径操作共享资源,示例修改后的代码:
    <?php
    // 若共享需要身份验证,先执行net use命令完成挂载验证
    exec('net use \\\\192.168.1.1\\File /user:共享端用户名 共享端密码 /persistent:no');
    
    $old = 'index.php';
    $new = '\\\\192.168.1.1\\File\\index.php';
    
    // 创建目录示例
    // if(!file_exists(dirname($new))){
    //     mkdir(dirname($new),0777,true);
    // }
    
    if (!copy($old, $new)) {
        echo "$old 复制失败\n";
    }
    
    // 操作完成后可主动清理连接
    exec('net use \\\\192.168.1.1\\File /delete');
    ?>
    
  • 第四步:解除函数限制
    若使用exec类命令验证共享,需先打开php.ini配置文件,从disable_functions配置项中移除exec、shell_exec等需要使用的函数,重启PHP服务后生效。
  • 额外排查项:
    • 确认共享主机与PHP运行主机的445端口连通正常,无防火墙拦截SMB请求
    • 若使用域环境,需确保PHP运行账户属于域内且已被授予共享访问权限
    • 操作共享目录前可先使用is_writable()函数判断路径是否可写,提前定位权限问题

内容的提问来源于stack exchange,提问作者Berkay KARADENİZ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:45:02