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モードで動かすと可能っぽいです.
XREA・CORESERVER.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サーバー特有の機能で、汎用性がない。
多分そこまでデメリットでもないんだろうけど,たまたま他のやり方も見つけたのでメモがてら紹介.
- まず,上のエラーメッセージをよく読むと,以下のようなログがある.
/virtual/hogehoge/public_html/wp-admin/includes/file.php
このパスを参考に,アップデートファイルを置く場所を以下にする.
/virtual/hogehoge/public_html/tmp - wp-admin/includes/file.phpをダウンロードして,get_temp_dir()を以下のように修正する.
- 自分のアカウントの/public_html/下に,tmpディレクトリを作成し,chmodでパーミッションを777にする.
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/';
}
ええ力尽くですともw
でもこれで一応出来ました.tmpディレクトリはアップデートが済んだら消しておいた方がいいかもしれません.また,file.phpがどのタイミングで呼び出されるかとかをちゃんと調べてないので,不具合が起きてしまう可能性があるのでfile.phpのバックアップはお忘れなく.

