由于只读属性,PHP mkdir权限被拒绝在Windows Server 2008 IIS 7上运行?

Chr*_*non 13 php iis permissions iis-7 windows-server-2008

我在Windows Server 2008上运行IIS 7上的PHP网站时遇到问题.

有一行代码调用mkdir,这是错误的,错误日志读取:

"... 没有权限 ..."

我已经排除了与文件夹权限有关的任何事情(我尝试了多个组:Everyone,Users,IUSR,Network Service等没有运气).

我需要知道mkdir是如何工作的,它是否检查了父文件夹的只读属性?

如果是这样,那么这可能是问题的根源,因为Windows Server 2008中的所有文件夹都被标记为"只读"而复选框是灰色的 - 微软称它是"按设计"但我觉得它真的很糟糕设计".

请帮忙.

PS可以在这里找到错误的代码行https://github.com/LimeSurvey/LimeSurvey/blob/070d255ba381d7abcd231d7c9e0c7d11f5578c97/admin/templates.php#L1182这是第1182行.

解:

  • 毕竟这是一个权限问题!
  • 我们将权限应用于错误的文件夹(从前额打到手)
  • 有两个"模板"文件夹:/模板和/上传/模板
  • / Template用于默认模板,而/ Uploads/Templates用于用户创建的模板
  • 我们将"用户"组的r/w /执行/修改权限授予/ Uploads/Templates文件夹
  • 而以前我们将权限应用于/ Templates
  • 为了调试这个我用来echo输出$target

得到教训:

  • 总是阅读错误消息 - 它说"许可被拒绝",我不相信
  • 不要假设显而易见 - /模板不是正确的文件夹
  • 如果代码出错,则调试代码,不要试图猜测问题
  • 使用简单的技术调试代码,例如输出变量值 - 例如echo
  • 聆听大多数人 - 这里的大多数人都说得对,这是一个允许的问题!
  • 大多数错误都有一个简单的修复 - 不要去寻找复杂的东西

Bounty被授予@BOMEz,因为mkdir()文档中的有用引用表明我应该双重考虑权限.@BOMEz还提供了量身定制的答案,并通过评论帮助我与我互动.

BOM*_*MEz 7

  • 作为测试(最好在开发环境中),为IIS用户提供对父文件夹的完全访问权限.如果这使它工作,慢慢开始取消权限,看看你需要哪些.

  • 尝试改变:

    if(mkdir($target,0777))

至:

if(mkdir($target))

Windows忽略模式选项.可能是一些奇怪的错误导致它失败.

另外,对于$ target变量,您可以尝试强制它链接到完整的Windows路径吗?如C:\Program Files\ IIS\...

我已经遇到过Windows的情况,之前拒绝访问尝试使用相对路径,但完整路径工作得很好.

编辑:查看mkdir()文档的注释,一位评论者提到您可能还需要向用户添加执行权限:

如果您收到"权限被拒绝"错误,但确定您尝试创建目录的权限和所有权是正确的,请再次检查:

您尝试创建目录的位置必须具有尝试创建目录的所有者的"执行"权限,无论该文件夹是"可读"还是"可写".

这对某些人来说可能是显而易见的,但起初并不适合我.希望这能为您省去我遇到的麻烦.