WordPressの自動更新の接続設定を退避させる

WordPressは自動更新の機能を持っていて、いくつかの接続方法で自身をアップデートすることができる。通常WordPressはウェブサーバの権限で動いていて、ファイルそのものはユーザが所有者になっていることが多いため、FTPやSSHを使ってユーザ権限でファイルを更新する仕組みとなっている。

それゆえ更新にユーザ名や、パスワード、SSHの場合は鍵の入力が求められてしまうが、この入力を省略するためにWordPressはデフォルト値の設定方法を用意してくれている。

WordPress Codex 日本語版 – wp-config.php の編集

FTPでアップデートする場合は、FTP_USER、FTP_PASS、FTP_HOSTあたりをwp-configに定義しておけばそれをデフォルト値としてWordPressを実行してくれる。

しかしwp-config.phpにユーザのアカウント情報を書きたくない。正確に言えば、ドキュメントルート以下にあるファイルにアカウント情報を書きたくない。

また自動更新ではなくローカルからファイルをウェブサーバにアップロードする時にSFTPやFTPSといったセキュアなプロトコルではなくただのFTPを使ってファイルを参照している人はそのwp-config.phpは暗号化が行われない状態でアップロード・ダウンロードしているため、そのファイルにそのサーバに接続するためのアカウント情報を書いているのはとても危険である。

というわけでこの接続情報を別の場所に退避する方法を紹介する。

まず、WordPressを置いているディレクトリとは関係ないところに以下のような接続設定を保存する。別に/var/wordpressである必要はなくウェブサーバで公開されていないディレクトリにしておけばいい。

<?php
define('FTP_USER', 'xxxxx');
define('FTP_PASS', 'xxxxx');
define('FTP_HOST', 'localhost');

FTP_HOSTについてはWordPressを実行しているウェブサーバから見ればアップデート先は自分自身なのでlocalhostとしている。ちなみにFTP,SSHのデフォルトポートを使っている場合はポートを明示的に指定する必要はない。

次にwp-config.phpに以下のハイライト部分を追加し、先程のファイルを参照する。他の設定との前後関係は関係ないので追加する位置は最後の方で良い。

if (file_exists('/var/wordpress/wp-config.php')) {
    require_once('/var/wordpress/wp-config.php');
}

/* That's all, stop editing! Happy blogging. */

/** WordPress absolute path to the WordPress directory. */
if ( !defined('ABSPATH') )
    define('ABSPATH', dirname(__FILE__) . '/');

この話とは別にファイルのアップロードにFTPを使っている人はFTPSを使うように変更しましょう。