我遇到了在 Windows Server 2008 上的 IIS 7 上运行的 PHP 网站的问题。
有一行代码调用 mkdir 出错,错误日志显示:
“... 没有权限 ...”
我已经排除了与文件夹权限有关的任何事情(我尝试了多个组:所有人、用户、IUSR、网络服务等,但没有运气)。
我需要知道 mkdir 是如何工作的,它是否检查父文件夹的只读属性?
如果是这样,那么这可能是问题的根源,因为 Windows Server 2008 中的所有文件夹都被标记为“只读”并且复选框是灰色的 - 微软说这是“设计使然”,但我认为它真的很“糟糕”设计”。
请帮忙。
PS 可以在这里找到错误的代码行https://github.com/LimeSurvey/LimeSurvey/blob/070d255ba381d7abcd231d7c9e0c7d11f5578c97/admin/templates.php#L1182它是第 1182 行。
解决方案:
- 毕竟是权限问题!
- 我们正在向错误的文件夹应用权限(用手摸额头)
- 有两个“模板”文件夹:/Templates 和 /Uploads/Templates
- /Template 用于默认模板,而 /Uploads/Templates 用于用户创建的模板
- 我们授予“用户”组 r/w/execute/modify 对 /Uploads/Templates 文件夹的权限
- 而之前我们对 /Templates 应用权限
- 为了调试这个我用来
echo
输出$target
值
得到教训:
- 总是阅读错误信息 - 它说“权限被拒绝”,我不相信
- 不要假设显而易见的事实 - /Templates 不是正确的文件夹
- 如果代码出错,请调试代码,不要试图猜测问题
- 使用简单的技术调试代码,例如输出变量值 - 例如 echo
- 听大多数人的意见 - 这里的大多数人都说这是一个权限问题是正确的!
- 大多数错误都有一个简单的修复 - 不要去寻找复杂的东西
赏金授予@BOMEz,因为mkdir()
文档中的有用引用表明我应该仔细考虑权限。@BOMEz 还提供了量身定制的答案,并通过有帮助的评论与我互动。