WordPress + Pure-FTPd の問題

Pure-FTPd を使っていると、WordPress (3.0以降?)のweb管理コンソールからのプラグイン更新やインストールなどが機能しないようです。
define(“FTP_METHOD”,”ftpsockets”); としている場合、

Downloading update from <a href="http://downloads.wordpress.org/plugin/akismet.2.5.2.zip">http://downloads.wordpress.org/plugin/akismet.2.5.2.zip</a>…
Unpacking the update…

Warning: Invalid argument supplied for foreach() in /path/to/wordpress/wp-admin/includes/class-wp-filesystem-ftpsockets.php on line 299
&nbsp;
Could not copy file. /path/to/wordpress/wp-content/upgrade/akismet.tmp/"

というエラーになり、
define(“FTP_METHOD”,”ftpext”); としている場合も別のエラーが出て失敗してしまいます。
フォーラムを探したところ、対応方法は

  • suPHPを使って権限を変える(FTP_METHOD に ‘direct’を使う?)
  • PureFTPd は諦めてProFTPdに乗り換える

の2通りに分かれている様子。
suPHPを使うと他のPHPスクリプトにまで影響が出てしまうため避けたい。
ということで、今回はPureFTPdとは別ポートで ProFTPd をインストールし、ProFTPd はローカルアクセス専用として配置することで対応しました。

最終的なwp-config.php の設定はこんな感じです。


define(‘FS_METHOD’, ‘ftpext’);
define(‘FTP_BASE’, ‘/path/to/wordpress/’); // FTPで見た時のWordPress設置フォルダのパス( / で終わる)
define(‘FTP_CONTENT_DIR’, FTP_BASE.’wp-content’);
define(‘FTP_PLUGIN_DIR’, FTP_BASE.’wp-content/plugins’);
define(‘FTP_USER’, ‘username’); // ProFTPdのログインユーザ名
define(‘FTP_PASS’, ‘password’); // ProFTPdのログインパスワード
define(‘FTP_HOST’, ‘localhost:2211’); // ポートに2211番を使用
[/code]

参考: