douhu2898 2012-06-18 19:05
浏览 122
已采纳

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

I'm having a problem with a PHP website running on IIS 7 on Windows Server 2008.

There is one line of code calling mkdir which is erroring and the error log reads:

"... permission denied ..."

I have ruled out anything to do with folder permissions (I have tried multiple groups: Everyone, Users, IUSR, Network Service etc. with no luck).

I need to know how mkdir works, does it check the read-only attribute of the parent folder?

If so, then this could be the root of the problem as all folders in Windows Server 2008 are marked as "Read Only" and the checkbox is greyed-out - Microsoft say it is "by design" but I think it is really "bad design".

Please help.

P.S. The line of code which errors can be found here https://github.com/LimeSurvey/LimeSurvey/blob/070d255ba381d7abcd231d7c9e0c7d11f5578c97/admin/templates.php#L1182 it is line 1182.

SOLUTION:

  • It was a permissions issue after all!
  • We were applying permissions to the wrong folder (smacks hand to forehead)
  • There are two "Templates" folders: /Templates and /Uploads/Templates
  • /Template is for default templates whereas /Uploads/Templates is for user-created ones
  • We gave the "Users" group r/w/execute/modify permissions to /Uploads/Templates folder
  • Whereas previously we were applying permissions to /Templates
  • To debug this I used echo to output the $target value

LESSONS LEARNT:

  • Always read the error message - it said "permission denied" and I didn't believe it
  • Don't assume the obvious to be true - /Templates wasn't the right folder
  • If the code is erroring then debug the code and don't try to guess the problem
  • Debug the code using simple techniques such as outputting variable values - e.g. echo
  • Listen to the majority - most people here were right in saying IT IS A PERMISSIONS ISSUE!
  • Most errors have a simple fix - don't go looking for something complex

Bounty awarded to @BOMEz because of the useful quote from mkdir() documentation which indicated that I should double-think the permissions. @BOMEz also provided a tailored answer and interacted with me via comments which helped.

  • 写回答

4条回答 默认 最新

  • doushou1298 2012-06-22 18:04
    关注
    • As a test (preferably in a development environment) give the IIS user full access to the parent folder. If this makes it work, slowly start taking away privileges to see which ones you need.

    • Try changing:

      if(mkdir($target,0777))

    to:

    if(mkdir($target))

    Windows ignores the mode option. Might be some weird bug causing it to fail.

    Additionally for your $target variable could you try forcing it to link to the full Windows path? Such as C:\Program Files\ IIS\...

    I've ran into situations with windows before where access was denied attempting to use a relative path, but the full path works just fine.

    EDIT: Looking at the comments on the documentation for mkdir() one commenter mentions that you might also need to add execute permissions to the user:

    If you're getting a Permission Denied error, but are certain the permissions and ownership where you are trying to create the directory are correct, check again:

    The location where you are trying to create the directory in must have the Execute permission for the owner trying to create it, regardless of if the folder is Readable, or Writable.

    This may be obvious to some, but was not to me at first. Hopefully this will save you the trouble I went through.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用