WordPressの自動更新機能を使用する時、環境によって、FTPの「接続情報」画面が表示されます。この判定を行っているのが wp-admin/includes/file.php の以下の箇所です。
function get_filesystem_method($args = array(), $context = false) {
$method = defined('FS_METHOD') ? FS_METHOD : false;
if ( ! $method && function_exists('getmyuid') && function_exists('fileowner') ){
if ( !$context )
$context = WP_CONTENT_DIR;
$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);
}
}
.....
この関数では、定数「FS_METHOD」をまずチェックします。これが設定されていない場合、アップデート対象ディレクトリに temp-write-test-00000 という仮ファイルを作成して、このファイルのオーナーが実行スクリプトのユーザーと同じかをチェックします。
FS_METHOD定数を設定する
一番簡単なのは、FS_METHOD定数をセットする方法です。
wp-config.php ファイルに以下を追加します
define('FS_METHOD','direct');
これでファイルのオーナーチェックはスルーされるので、後は実際にファイルが更新できるように編集権限を与えるだけです。今回は自分のサーバなので、PHPの実行ユーザーの apache (サーバの環境によって異なります) がグループ権限でファイル編集できるようにします。
まず、wordpressのルートディレクトリに行って、すべてのファイルとディレクトリのグループを apache にします。
$ chgrp -R apache *
次にグループに権限を与えます。
$ chmod -R g+rwX *
元の権限設定を生かす為、グループの権限のみ追加しました。ファイルが664、ディレクトリが775になってればOKです。これでFTPの接続情報はいらなくなったはずです。
※ chmodのオプションのXは大文字です。大文字のXは、指定ファイルすべてに実行権限を適用するのではなく、元々、他に実行権限のあるファイルとディレクトリだけに適用されます。
ファイルのグループが編集できない環境の場合は、必要なディレクトリを一時的に 777 等にすることで可能ですが、セキュリティには十分注意しましょう。
ファイルオーナーを設定する
定数を設定する他にファイルオーナーを設定する方法もあります。アップデートスクリプトのファイルオーナーをPHPの実行ユーザと同じにします。
# プラグインのアップデートスクリプト
$ chown apahce.apache wp-admin/update.php
# WordPress本体のアップデートスクリプト
$ chown apache.apache wp-admin/update-core.php
この後、先ほどのように apache ユーザーがグループ権限でファイルを更新できるように設定すればOKです。