日曜研究室 〜技術的な日常〜

技術的な観点から日常を綴ります

   7 月 03

XREAのレンタル共用サーバーに設置したWordPressでメディアの一括削除ができない

WordPressのバージョンは2.7.1です。 いつも書いてる通りXREAのサーバーはあまり触りたくないのですが、依頼なので仕方ありません。 XREAでWordPressを動かす場合、モジュール版PHPではパーミッションの関連上ファイル操作に難があり、普通に設置しただけではWordPressから画像などをアップロードすることが出来ません。(PHPのセーフモードがらみの問題で、仕様ですね) そこで、管理画面は(もしくはアップロード用スクリプトのみを)CGI版PHPで動かす設定を.htaccessで施すことによってその問題を回避する方法があります。 まぁココまでは”XREA WordPress”などで検索すれば幾らでも出てくる情報なんですが、その設定をやった上で、今回新たに「メディアライブラリの一覧で、個々のファイルの左にあるチェックボックスを複数チェックして、一括して削除しようとしたときに、サーバーからの応答が無くなる」という問題が発生しました。 応答がなくても、実際によく調べてみると、ファイルの削除もデータベースの操作も完了してるっぽかったので正確には「削除できてる」んですが、削除ボタン(実際には適用ボタンですか)を押してから、ブラウザが延々といわゆる「読み込み中」のまま、という状態です。 HTTPヘッダも何も返ってこない状態。 該当部分のソースを読んでみたり色々テストしていくと、削除処理をした後のリダイレクト処理部分で”wp_redirect”という関数が呼ばれており、どうもその関数が上手く動いてない様子でした。 ちなみにモジュール版なら”wp_redirect”関数自体は普通に動作します。 一括削除処理だけモジュール版で動作するようにしようかと一瞬思いましたが、そのwp_redirect関数を含むファイルって、upload.phpなんですよね。 つまりupload.phpに表示・追加・削除の機能が一つにまとめられてるので、htaccessのfilesディレクティブで切り替える方法が使えません。 とりあえず今回はwp_redirectを呼んでる行をコメントアウトして、 <html> <header> <title>wordpress redirect</title> <meta http-equiv=”Refresh” content=”0; URL=$location”> </header> <body> しばらくお待ち下さい。 </body> </html> という内容を返すようにしました。 文字化けるかもしれないのでもっとちゃんとしたソースを返すようにした方がいいです。 他にもwp_redirect関数を呼び出してる部分があったのですが、それらはちゃんと動いてるようでした(ホントかな)のでそのままです。 一応調査の中で、 header(‘Location: http://example.com/’); などと一行だけ書いたスクリプトをCGI版で動かしてみたりしましたが普通に動きました。 まぁ、これが動かなかったら大問題になりますけど。 原因は複合的なんでしょうね。

Read the rest of this entry »