我在Windows Server 2008的IIS 7上运行的PHP网站出现问题。

有一行代码调用mkdir出现错误,错误日志显示为:

“... 没有权限 ...”

我已经排除了与文件夹权限有关的一切(我尝试了多个组:每个人,用户,IUSR,网络服务等,但没有运气)。

我需要知道mkdir的工作方式,它会检查父文件夹的只读属性吗?

如果是这样,那么这可能是问题的根源,因为Windows Server 2008中的所有文件夹都标记为“只读”,并且该复选框呈灰色显示-微软说这是“设计使然”,但我认为它确实是“不好的”设计”。

请帮忙。

附言可以在https://github.com/LimeSurvey/LimeSurvey/blob/070d255ba381d7abcd231d7c9e0c7d11f5578c97/admin/templates.php#L1182中找到错误的代码行是1182行。

解:

  • 毕竟是权限问题!
  • 我们正在将权限应用于错误的文件夹(s额子到额头)
  • 有两个"template"文件夹:/ Templates和/ Uploads / Templates
  • / Template用于默认模板,而/ Uploads / Templates用于用户创建的模板
  • 我们为“/上传/模板”文件夹
  • 赋予了“用户”组r / w / execute / modify权限
  • 之前我们是对/ Templates
  • 应用权限
  • 为了调试此问题,我使用echo输出$target

  • 得到教训:
  • 始终阅读错误消息-它说“权限被拒绝”,我不相信它。
  • 不要以为是显而易见的-/ Templates不是正确的文件夹
  • 如果代码出错,则调试代码,不要试图猜测问题
  • 使用简单的技术(例如输出变量值)调试代码-例如回声
  • 听大多数人的声音-这里的大多数人都说这是许可问题!
  • 大多数错误都有一个简单的解决方法-不要去寻找复杂的

  • 赏金授予@BOMEz,因为mkdir()文档提供了有用的报价,表明我应该仔细考虑权限。 @BOMEz还提供了量身定制的答案,并通过提供帮助的评论与我互动。

    最佳答案

  • 作为一项测试(最好在开发环境中),使IIS用户可以完全访问父文件夹。如果可以,请慢慢开始取消特权,以查看所需的特权。
  • 尝试更改:if(mkdir($target,0777))

  • 至:if(mkdir($target))Windows将忽略模式选项。可能是一些奇怪的错误导致了它的失败。
    此外,对于$ target变量,您可以尝试强制将其链接到完整的Windows路径吗?如C:\Program Files\ IIS\...在遇到拒绝使用尝试使用相对路径的访问之前,我曾遇到过Windows的情况,但是完整路径可以正常工作。
    编辑:
    查看mkdir()文档上的注释时,一个注释者提到您可能还需要向用户添加执行权限:

    07-24 09:51
    查看更多