Drupal的IIS问题-更新管理器:更新失败!目录被php-cgi.exe锁定


9

在GUI上使用“更新管理器”时遇到一些问题。某些目录被锁定php-cgi.exe,因此用新下载的目录(较新的目录)替换原始目录不成功。
但我不得不提的是它不是一个权限问题,因为该模块可以通过获取安装“从URL安装”/admin/modules/install,和工作没有问题。

让我们举个例子:

  1. 可用的更新页面(/admin/reports/updates/update):

    可用更新

    现在,我选择要更新的Select(或其他)模块(选择哪个模块都没有关系,结果相同!!!这只是一个示例)。

  2. 我点击“下载这些更新”按钮。

  3. 好的,下载模块的更新实例不会出现问题:
    更新已成功下载 ”: 更新下载成功
  4. 现在,单击“ 继续”
  5. 错误来了。结果:
    更新失败!有关更多信息,请参见下面的日志
    。select_or_other
    • 安装/更新时出错
    • 文件传输失败,原因:无法复制D:/Projects/web/drupal-7/tmp/update-extraction-6d8993ac/select_or_other/LICENSE.txt/Projects/web/drupal-7/htdocs/sites/all/modules/select_or_other/LICENSE.txt更新失败!
  6. 好的,我开始尝试检查可能的原因。
    • 下面是我的Drupal目录结构如下:TC目录结构。我设置../tmp为临时目录(位于中/admin/config/media/file-system),Drupal文件位于中htdocs。这是正确的,因为如上所述,我可以通过GUI安装模块。
    • 当我尝试进入htdocs/sites/all/modules/select_or_other目录时,不能,因为我收到“文件上的访问被拒绝......sites/all/modules/select_or_other!”。在Total Commander中打开时,而...sites/all/modules/select_or_other不能访问,访问被拒绝。”当打开Windows资源管理器: 试图在Total Commander中打开目录试图在Windows资源管理器中打开目录
    • 好的,我右键单击该文件夹,然后通过快捷菜单中的助手打开Unlocker。它说该目录是通过php-cgi.exe以下方式锁定的: 解锁-由php-cgi.exe锁定的目录 我单击“全部解锁”,该文件夹现在可以被删除(因为不再通过它锁定php-cgi.exe),因此它只是
    • 我可以在找到更新的select_or_other模块的目录tmp<code> tmp </ code>中更新的模块目录
    • 所以我必须手动将其移至sites/all/modules目录。

锁定目录的可能原因是php-cgi.exe什么?(可能的Windows缓存扩展1.1 PHP 5.3通过Web平台安装程序安装?但是,如果是的,这是什么原因,例如图像的缺失或类似的通过GUI正常工作?)
我能做些什么来避免这个问题,并让“更新经理”的工作?


我在IIS7 / 2008R2上看到与Drupal 7.15完全相同的行为。解决该问题将非常好。
Nic 2012年

@Nic:我同意!:)
Sk8erPeter

我断断续续地看到了这一点。出于好奇,刷新应用程序池是否也会解锁?
布伦特

2
我知道这不是主题,但我不得不说-在IIS上远离Drupal。正如我在屏幕截图上看到的那样,您可能正在将其用于本地开发。查看WAMPAcquia Dev Desktop。如果仅在生产服务器上使用它,请忽略我的评论:)我必须在某些站点上使用IIS,到目前为止,它并不是一个很好的体验。
Aram Boyajyan 2012年

@布伦特:我不知道。在Drupal中运行页面后,文件和目录似乎被锁定了未知的时间。顺便说一句,我也使用了Drush,并且当我想使用来更新模块时drush up -y,我遇到了相同的问题:我必须使用Unlocker来解锁这些文件和目录才能使其正常工作,否则我将收到错误消息,指出这些无法写入/删除目录,并且更新过程会中断。如果在运行此过程之前使用Unlocker,则更新成功。
Sk8erPeter

Answers:


1

这是不安全的,它不允许从Drupal用户界面写入文件以更新模块,而不是使用ftp。

但是,如果您要转到托管的整体面板,请右键单击httpdocs目录,然后在获得权限后,现在在权限中,将写入权限授予应用程序池用户,

谢谢


0

php-cgi具有锁定的原因是由于Windows处理文件访问的“特殊”方式,而php / iis处理“缓存”。基本上,您只是创建了目录并尝试访问该目录,但是并未释放创建该目录的句柄(因此该目录仍处于锁定状态)。这不是一个drupal的问题,它是一个IIS / PHP的问题,而且我找不到任何已知的解决方法。

基本上,最好不要使用IIS是最基本的建议,我已经看到了这个问题,而不仅仅是通过使用apache HTTPD(在Win32上)解决了IIS的drupal。提醒您要回到学校,进行一个要求我使用Windows 2000的项目。

我知道在Windows上运行drupal的最好方法是通过apache(因为php的内部处理)。


0

需要向正确方向挖掘的一些想法:

如果您从Drush遇到相同的问题,那么我不确定这是否是IIS问题。Drush是否不只是在没有IIS的情况下从命令行执行PHP?您可以通过停止IIS(iisreset / stop)然后运行Drush update命令来尝试此操作,我希望您能获得相同的结果。

另一件事(对不起,我没有足够的声誉来直接评论劳里的回答):

“基本上,您只是创建了目录并尝试访问该目录,但是未释放创建该目录的句柄”

这是真的吗?从原始帖子看来,他好像是在“ tmp”中创建了文件夹,但锁位于“ httpdocs”中已存在的文件夹上。

我的猜测是php-cgi试图从tmp复制到httpdocs,由于某种原因而失败,并且没有删除锁。因此,当您在失败后进行调查时,您会看到httpdocs上的锁定,但是我认为失败的最初原因不是锁定,毕竟这可能是tmp文件夹上的权限问题!


如果是那样的话,他也不能“手动”移动目录,那么将在升级过程中创建目录。IIS通过其CGI接口参与其中,该接口以引起奇怪的错误而闻名。并且报告的错误不是“无法访问”而是“无法复制到”错误。
LvB 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.