在 IIS 7 上添加对 PHP 的写入权限

Posted

技术标签:

【中文标题】在 IIS 7 上添加对 PHP 的写入权限【英文标题】:Add writing permission to PHP on IIS 7 【发布时间】:2011-08-18 17:32:56 【问题描述】:

我需要一个 php 脚本才能在目录中拥有写入权限。 PHP 5.3 在 IIS 7 下作为 FastCGI 运行,Windows Server 2008 作为 OP。在我的 php 错误日志中,当脚本尝试写入文件时,我得到“权限被拒绝”。

我该如何解决这个问题?我试图将所有权利授予 IIS_IUSR 和 IUSR_myservername(右键单击我的文件夹),但没有成功。

任何帮助将不胜感激,

问候,

朱利安

【问题讨论】:

【参考方案1】:

您需要授予 PHP 写入权限,而不是 IIS。这意味着运行 PHP 的用户帐户需要权限(可能与运行 IIS 的用户帐户相同)。

【讨论】:

如何判断 PHP 运行在哪个帐户上? php-cgi.exe 将从 w3wp.exe 生成并具有相同的上下文。就像上面所说的 tomfumb 所说,授予 Windows 安全上下文 'IIS APPPOOL\MyAppName' 对相关文件夹的写入权限。 要确切知道您需要向哪个用户授予写入权限,请查看我的答案。【参考方案2】:

我有相同的设置,我必须授予写权限:

IUSR IIS AppPool\<<AppPoolName>>

【讨论】:

非常感谢,当我给IUSR写权限时它就可以工作了! 你还需要iisreset 才能重新加载php。 @svandragt 因为如果您的应用程序使用“应用程序池标识”运行,这就是它使用的帐户 在我的情况下,不需要做 iisreset,只给 IUSR 写权限就可以了。 > 可能是 DefaultAppPool【参考方案3】:

其实稍微复杂一点。

首先要做的是在相关网站上创建一个简单的 PHP 文件。 (在相关网站上创建文件很重要,因为每个网站可以有不同的设置。)该文件的内容应该是:

<?php var_dump(ini_get('fastcgi.impersonate')); ?>

使用浏览器导航到该文件。

** 案例 1 **

如果您的浏览器显示:

string(1) "1"

然后,您需要执行以下命令(您需要将“默认网站”替换为您在 IIS 中为您的网站指定的名称):

%windir%\system32\inetsrv\appcmd.exe list config "Default Web Site" ^
/section:anonymousAuthentication

您将收到如下所示的答案:

<system.webServer>
  <security>
    <authentication>
      <anonymousAuthentication enabled="true" userName="IUSR" />
    </authentication>
   </security>
</system.webServer>

您要查找的信息是anonymousAutthentification 标记的username 属性的值。

如果此值不为空,则其内容是您需要授予写入权限的用户的名称。 如果此值为空或只是缺少该属性,您需要向IIS AppPool\AppPoolName 授予写入权限(将“AppPoolName”替换为您网站的应用程序池的名称)。

** 案例 2 **

如果您的浏览器显示:

string(1) "0"

您需要向IIS AppPool\AppPoolName 授予写入权限(将“AppPoolName”替换为您网站的应用程序池的名称)。

【讨论】:

非常感谢您提供的详细信息。当答案只是“x”而不说如何找出答案或为什么是“x”时,我总是有点坐立不安 在哪里执行命令?在 cmd 中还是在某些特定的 shell 中? @tristan Charbonnier 很抱歉碰到一个旧线程,但您知道如何为 AD 和网络驱动器设置应用程序池权限吗? 这需要更多的支持! ...经过 4 天与“缺少临时文件夹”相关的搜索。 WordPress中的问题,我终于明白它的IIS AppPool需要PHP upload_tmp_dir文件夹而不是WP_TEMP_DIR的权限。谢谢老兄!

以上是关于在 IIS 7 上添加对 PHP 的写入权限的主要内容,如果未能解决你的问题,请参考以下文章

如何设置IIS网站目录的访问权限

IIS 7.5 App Pool Identity 权限未分配给文件夹,但应用程序仍然可以写入其文件夹?

以编程方式将具有写入权限的 IIS_IUSRS 添加到目录

在 IIS 7.5 和 Windows Server 2008 R2 下为 ASP.NET 授予对联网 UNC 文件夹的写入权限

IIS 7 权限:如何为目录设置正确的权限?

如何在 IIS 中授予 Web api 应用程序写入权限?