xrea serverでWordPressを使っていると,phpにSAFE MODEがかかっていてWordPressを自動アップグレード出来ない.

エラー例:

WordPress のアップグレード

http://ja.wordpress.org/wordpress-2.9.1-ja.zip からアップデートをダウンロードしています。

Warning: touch() [function.touch]: SAFE MODE Restriction in effect. The script whose uid is 10418 is not allowed to access /tmp owned by uid 0 in/virtual/hogehoge/public_html/wp-admin/includes/file.php on line 175

ダウンロードに失敗しました。: 一時ファイルを作成できませんでした

インストール失敗

xreaに限らず割とよく知られている問題のようで,以下のようなまとめサイトもある.

セーフモードによる制限と対処方法 – WordPress Codex 日本語版.

上記URLによると,phpをcgiモードで動かすと可能っぽいです.

XREACORESERVER.JP にて、PHP を CGIモードで動かすことにより対処したい場合、次の内容を書いた .htaccess ファイルを wp-admin/ ディレクトリに置きます。

WordPress 2.9.x の場合:

# 画像・ファイルアップロード
<files async-upload.php>
AddHandler application/x-httpd-phpcgi .php
</files>
# プラグイン・テーマ 新規インストール/アップグレード
<Files update.php>
AddHandler application/x-httpd-phpcgi .php
</Files>
# 本体アップグレード
<Files update-core.php>
AddHandler application/x-httpd-phpcgi .php
</Files>

ただし,メリット/デメリットがあるらしい.

PHPをCGIとして動かす方法について – XREA&CORE SUPPORT BOARD.

○メリット

・ユーザー権限で実行され、セーフモードがOFFになっているため、様々な制限がない。
・負荷率が管理画面で見られる。

○デメリット

・モジュール版PHPに比べて、動作が遅くなる。負荷が掛かる。
・XREAサーバー特有の機能で、汎用性がない。

多分そこまでデメリットでもないんだろうけど,たまたま他のやり方も見つけたのでメモがてら紹介.

  1. まず,上のエラーメッセージをよく読むと,以下のようなログがある.
    /virtual/hogehoge/public_html/wp-admin/includes/file.php
    このパスを参考に,アップデートファイルを置く場所を以下にする.
    /virtual/hogehoge/public_html/tmp
  2. wp-admin/includes/file.phpをダウンロードして,get_temp_dir()を以下のように修正する.
  3. function get_temp_dir() {
    /*
            if ( defined('WP_TEMP_DIR') )
                    return trailingslashit(WP_TEMP_DIR);
    
            $temp = WP_CONTENT_DIR . '/';
            if ( is_dir($temp) && is_writable($temp) )
                    return $temp;
    
            if  ( function_exists('sys_get_temp_dir') )
                    return trailingslashit(sys_get_temp_dir());
    */
            return '/virtual/hogehoge/public_html/tmp/';
    }
    
  4. 自分のアカウントの/public_html/下に,tmpディレクトリを作成し,chmodでパーミッションを777にする.

ええ力尽くですともw
でもこれで一応出来ました.tmpディレクトリはアップデートが済んだら消しておいた方がいいかもしれません.また,file.phpがどのタイミングで呼び出されるかとかをちゃんと調べてないので,不具合が起きてしまう可能性があるのでfile.phpのバックアップはお忘れなく

FC2ブックマークへ追加 Bookmark this on Delicious このエントリーを含むはてなブックマークはてなブックマーク - WordPress@Xrea Server (SAFE MODE php環境)でのWordPressの自動アップグレード方法