我在通过WPI安装的Win2k8 / IIS7上运行WordPress(使用httpcache,fastCgi& UrlRewriter 2.0)。一切似乎都运行良好(上传,通过Live Writer发布,评论,插件,漂亮的URL)。
我正在尝试将WordPress更新到最新版本,但我收到如下错误:
下载失败。文件流的目标目录没有 存在或不可写
这与尝试下载主题或更新插件时出现的错误相同。
事件日志中没有错误,WordPress并没有真正告诉我它正在寻找哪个目录,它认为它正在使用什么用户或缺少什么权限。
我已经双重(和三重)检查了IIS App Pool用户是否已明确设置,并且该目录具有该用户的修改权限,最后这些权限已被传播到子文件夹。
根据Google博士的建议,我还在配置文件中添加了以下设置:
/** Absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/');
/** Sets up WordPress vars and included files. */
require_once(ABSPATH . 'wp-settings.php');
define('WP_TEMP_DIR', ABSPATH . 'wp-content/');
define('FS_METHOD', 'direct');
我错过了配置选项或设置吗? WordPress需要牺牲一只小猫和/或阿尔及利亚人吗?
答案 0 :(得分:8)
来自PHP manual on IIS7 installation(强调我的):
模拟和文件系统访问
建议在使用时在PHP中启用FastCGI模拟 IIS。 这是由中的fastcgi.impersonate指令控制的 php.ini文件。启用模拟后,PHP将执行所有操作 文件系统操作代表已经用过的用户帐户 由 IIS身份验证确定。这确保即使相同 PHP进程在不同的IIS网站(PHP脚本)之间共享 在那些网站将无法访问彼此的文件 只要不同的用户帐户用于IIS身份验证 每个网站。
例如,IIS 7在其默认配置中具有匿名性 使用内置用户帐户启用身份验证IUSR用作 默认身份。 这意味着为了让IIS执行PHP 脚本,有必要授予IUSR帐户读取权限 那些脚本。如果PHP应用程序需要执行写操作 某些文件或将文件写入某些文件夹然后是IUSR帐户 应该有写入权限。
如"Should I impersonate PHP via FastCGI?" question on ServerFault中所述,如果您授予服务器上的匿名用户写访问权限,则存在安全问题。例如,如果您还启用了WebDAV模块,则任何人都可以使用此协议写入您的目录!
因此我的推荐是:
ApplicationPoolIdentity
。fastcgi.impersonate = 0
在 php.ini 中禁用模拟,因此PHP在IIS中设置的应用程序池标识下运行。这样,所有PHP脚本都可以保证在系统帐户下运行,与站点的应用程序池相关联(将其与其他站点隔离),并且不会通过模拟意外获得过于公开访问。
答案 1 :(得分:2)
如果我错了,请纠正我,但我相信以下配置提供了相同的好处,并且还尊重PHP所需的fastcgi.impersonate = 1设置。
步骤1,2和4是相同的 - 步骤3是不同的。
我们不授予对Webroot的IUSR或IIS_IUSRS访问权限。所有权限都分配给IIS AppPool \ MyAppPoolName