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

Windows开发环境下如何让新上传文件继承文件夹权限?

解决Windows服务器下PHP上传文件权限不继承问题

问题原因

Windows环境中,PHP通过move_uploaded_file上传的文件,其权限由服务器运行进程(如IIS的IUSR账户、Apache服务账户)的权限决定,不会自动继承父文件夹的权限设置——即便父文件夹配置了Everyone读取权限,新上传的文件仍可能没有任何用户的访问权限。

解决方案

1. 上传后用PHP的chmod设置权限

在文件上传完成后,直接通过chmod命令设置文件的可读权限,对应Windows下Everyone的读取权限:

$nameOfImage = $scanning->getId() . $token . '_scanning.' . pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
$targetPath = './patient/files/import/scans/' . $nameOfImage;

move_uploaded_file($_FILES['photo']['tmp_name'], $targetPath);
// 设置文件权限为所有者读写,其他用户只读,对应Windows的Everyone读取权限
chmod($targetPath, 0644);

2. 用Windows原生icacls命令添加权限

如果chmod效果不符合预期,可直接调用Windows的icacls工具给文件添加Everyone的读取权限:

$nameOfImage = $scanning->getId() . $token . '_scanning.' . pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
$targetPath = './patient/files/import/scans/' . $nameOfImage;

move_uploaded_file($_FILES['photo']['tmp_name'], $targetPath);
// 执行icacls命令授予Everyone读取权限
exec('icacls "' . $targetPath . '" /grant Everyone:R');

3. 修复父文件夹的权限继承设置

如果之前修改父文件夹权限未生效,需检查权限继承配置:

  • 右键目标父文件夹./patient/files/import/scans/,打开「属性」→「安全」→「高级」
  • 确保「包括可从该对象的父项继承的权限」选项已勾选
  • 点击「应用」保存设置,重新上传文件测试

额外注意事项

确保服务器运行的账户(如IIS的IUSR、IIS_IUSRS,或Apache的服务账户)对目标文件夹拥有写入权限,否则不仅无法上传文件,后续修改权限的操作也会失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:41:01