web-dev-qa-db-ja.com

IISの問題Drupal-更新マネージャー:更新に失敗しました!ディレクトリはphp-cgi.exeによってロックされています

GUIで「アップデートマネージャ」を使用するときに問題が発生します。一部のディレクトリはphp-cgi.exeによってロックされるため、元のディレクトリを新しくダウンロードしたディレクトリ(新しい)で置き換えることはできません。
しかし、モジュールは/admin/modules/install」の(= /// =)「Install from a URL」を介してインストールできるため、権限の問題ではないことを述べておかなければなりません。問題なく動作します。

例を見てみましょう:

  1. 利用可能な更新ページ(/admin/reports/updates/update):

    Available updates

    ここで、選択(またはその他)更新するモジュール(をチェックします。どのモジュールを選択してもかまいません、結果は同じです!!したがって、単なる例です)。

  2. 「これらのアップデートをダウンロード」ボタンを押します。

  3. OK、モジュールの更新されたインスタンスは問題なくダウンロードされます:
    "アップデートが正常にダウンロードされました": Updates downloaded successfully
  4. Continueをクリックします。
  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にコピーできません。Update failed!
  6. OK、考えられる理由を調べようとしています。
    • 私のDrupalディレクトリ構造は次のようになります: TC directory structure../tmpを一時ディレクトリ(/admin/config/media/file-system内)に設定し、Drupalファイルはhtdocsにあります。これは正しいので、インストールできます。上記で述べたように、GUI経由のモジュール。
    • 合計で開いたときに「ファイルhtdocs/sites/all/modules/select_or_other!へのアクセスが拒否されました」が表示されるため、......sites/all/modules/select_or_otherディレクトリにアクセスしようとしてもできません。司令官、および "...sites/all/modules/select_or_otherにアクセスできません。Windowsエクスプローラーで開くと、アクセスが拒否されました": trying to open directory in Total Commander、 trying to open directory in Windows Explorer
    • フォルダを右クリックして、コンテキストメニューのアシスタントから nlocker を開きます。このディレクトリはphp-cgi.exeによってロックされています: Unlocker - directory locked by php-cgi.exe [Unlock All]をクリックすると、フォルダーが削除されます(php-cgi.exeでロックされなくなったため)。
    • 更新されたselect_or_otherモジュールのディレクトリはtmpにあります: updated module's directory in <code>tmp</code>
    • 手動でsites/all/modulesディレクトリに移動する必要があります。

php-cgi.exeによるディレクトリのロックアップの考えられる理由は何ですか?(おそらくWindows Cache Extension 1.1 for PHP 5.3はWebプラットフォームインストーラーを介してインストールされますか?しかし、インストールされている場合、たとえば、GUIを介した画像の削除などが正しく機能しているのはなぜですか?)
この問題を回避し、「アップデートマネージャ」を機能させるにはどうすればよいですか?

9
Sk8erPeter

これは安全ではなく、Drupalモジュールを更新するためのユーザーインターフェイスからファイルを書き込むことができます。代わりに、ftpを使用してください。

しかし、必要に応じて、ホスティングのpleskパネルに移動し、httpdocsディレクトリを右クリックして、権限をクリックします。次に、権限で、アプリケーションプールユーザーに書き込み権限を与えます。

ありがとう

1
bhupendraosd

Php-cgiがロックを保持する理由は、ウィンドウがファイルアクセスを処理する「特定の」方法と、php/iisが「キャッシュ」を処理するためです。基本的には、ディレクトリを作成してアクセスしようとしたが、それを作成したハンドルが解放されなかった(そのため、まだロックされていた)。これはdrupalの問題ではありません。IIS/ PHPの問題です。また、私が見つけることができる既知の回避策はありません。

基本的には、IISが最適ではないという基本的なアドバイスを行います。この問題は、drupal with IIS(win32の)Apache HTTPDに移動することで解決しました。Windows2000を使用する必要があったプロジェクトで、学校に戻ったことを覚えておいてください。

windowsでdrupalを実行することについて知っている最善の方法は、Apacheを使用することです(phpの内部処理のため)。

0
LvB

正しい方向に掘るためのいくつかのアイデア:

Drushで同じ問題が発生した場合、これがIIS問題であるかどうかはわかりません。Drushは、PHP IIS?IIS(iisreset/stop)を停止してからDrush updateコマンドを実行すると、同じ結果が得られると思います。

その他(申し訳ありませんが、ローリーの答えに直接コメントするのに十分な評判がありません):

「基本的にディレクトリを作成してアクセスしようとしたが、それを作成したハンドルが解放されなかった」

これは本当ですか?元の投稿から、彼は「tmp」にフォルダを作成したように見えますが、ロックは「httpdocs」の既存のフォルダにあります。

私の推測では、php-cgiはtmpからhttpdocsへのコピーを試み、何らかの理由で失敗し、ロックを解除しません。したがって、失敗後に調査すると、httpdocsがロックされているのがわかりますが、失敗の最初の理由はロックではないと思います。結局のところ、tmpフォルダーのアクセス権の問題かもしれません。

0
dustinmoris