某環境にて、テストで WordPress 4.0(ベータ版)をインストールしてみたのですが、最初の言語選択で日本語を選んだ場合、本来なら
と日本語表示になるのに
と英語のままとなってしまう現象がありました。
この原因を探っていったところ、ファイルのダウンロードが有効かどうかを調べるチェックの過程で実行される get_filesystem_method が原因であることが分かりました。
具体的には、問題なく動作する環境では、この関数の返り値が direct であるのに対し、失敗する環境では、ftpext が返ってきます。
この違いは、関数内の以下のコードによります。
$context = trailingslashit($context); $temp_file_name = $context . 'temp-write-test-' . time(); $temp_handle = @fopen($temp_file_name, 'w'); if ( $temp_handle ) { if ( getmyuid() == @fileowner($temp_file_name) ) $method = 'direct'; @fclose($temp_handle); @unlink($temp_file_name); }
コードの内容を簡単に説明すると、$context (インストール時は wp-contentディレクトリのパス)に、検証用の一時ファイルを作成し、そのファイル所有者と、getmyuid 関数で、PHP スクリプト所有者が同一かどうかのチェックを行っています。
このチェックが失敗(所有者が異なったり、ファイルが作成できなかった)した場合、$method に direct が代入されず、ftpext が返ってしまって、最終的に言語ファイルがダウンロード失敗に繋がります。
では、どうすれば良いかというと、検証用の一時ファイルはPHPが作成するため、PHPの実行ユーザーとなります。getmyuid 関数で返るPHP スクリプトの所有者は、インストール時の起動スクリプトである wp-admin/setup-config.php のファイル所有者ですので、これらを同一にすることで解消することができます。
つまり、対処方法は、PHPの実行ユーザーか、setup-config.php のファイル所有者を変えるかのいずれかになります。
ただし、この操作は、サーバー管理者レベルの権限が必要になるため、結構対応が難しいかもしれません。特に共用のレンタルサーバーとかでは。
この現象、結構発生する環境も多いのではないかと思っていて、ちょっと危惧しています。