WordPressがFTP接続情報を求めるときはファイルの所有者と更新方法を確認する
公開日: 執筆:佐藤
WordPressの更新やプラグインのインストールでFTP接続情報を求められたら、WordPressがファイルへ直接書く方法を選べなかった理由を先に確認します。入力を求めているのは、WordPress管理画面の利用者名とパスワードではありません。
ファイル権限を一律に777へ変えたり、FS_METHODをdirectへ固定したりして画面だけを消してはいけません。対象ファイルの所有者、PHPがファイルを作る利用者、書き込み先、サーバーが認める接続方法を記録してから直します。
接続情報の画面はファイル操作の方法を決めるために出る
WordPressは、更新するファイルを一つの方法だけで書き換えるのではなく、Filesystem APIを通じて利用できる方法を選びます。WordPressの更新処理は、更新先へ接続する段階でrequest_filesystem_credentials()を呼び、得た情報をWP_Filesystem()へ渡します。
直接書き込める条件を満たせば、接続情報の入力は不要です。直接操作を選べない場合は、サーバーで利用できる方法に応じて、FTPまたはSSHの接続情報を求めます。
この画面が出ることだけで、WordPressが壊れているとも、FTPしか使えないサーバーだとも決められません。WordPressが選んだ方法と、その理由を確かめる入口です。
directは書き込みと所有者の両方を確かめて選ばれる
WordPressのファイル操作方法を選ぶ処理は、作業先へ一時ファイルを作ります。ファイルを作成でき、実行中のWordPressファイルと一時ファイルの所有者が一致すると、directを選びます。
書き込み可能という一点だけでは、直接操作を選びません。共有サーバーでは、PHPが作ったファイルと、契約利用者が管理するWordPressファイルの所有者が異なる場合があります。WordPressは、この違いがある状態でウェブサーバー側の利用者がファイルを所有することを避けるため、FTPなどの方法へ切り替えます。
確認する対象は三つです。
| 対象 | 確認する内容 |
|---|---|
| 更新前のファイル | 所有者、グループ、権限 |
| PHPが作る一時ファイル | 作成できる場所、作成後の所有者 |
| 更新先 | WordPress本体、テーマ、プラグインのどこへ書くか |
画像のアップロードができても、プラグインのディレクトリへ同じ条件で書けるとは限りません。成功した別の操作から、更新先の所有者と権限を推測しないようにします。
WordPress管理者とFTPの認証情報は別である
画面へ何を入力するか分からない場合は、認証情報の役割を分けます。
| 認証情報 | 主な用途 | FTP接続情報の画面へ入れるか |
|---|---|---|
| WordPress管理者 | 投稿、設定、利用者などの管理 | 入れない |
| FTPまたはSSH | サーバー上のファイル操作 | サーバーが指定したものを使う |
| サーバー管理画面 | 契約、ドメイン、メール、サーバー設定 | 同じとは限らない |
| データベース | WordPressからデータベースへの接続 | 入れない |
WordPress管理者のパスワードを試し、通らないから変更する方法は採りません。サイト所有者またはサーバー管理者へ、接続先、利用者名、接続方式、操作できるディレクトリを確認します。
制作会社が認証情報を持っている場合は、更新を頼むかどうかと、事業者が認証情報を受け取って管理できるかを分けます。作業を委託しても、サーバー契約とファイルを引き継げる状態は事業者側で確認します。
FS_METHODは所有者や権限を変えない
FS_METHODをwp-config.phpへ定義すると、WordPressが自動判定した方法を上書きできます。しかし、この定数は、ファイルの所有者を変えたり、書き込み権限を与えたりする設定ではありません。
directへ固定すれば接続情報の画面を通らなくても、更新先へ安全に書ける状態になったとは限りません。書き込みに失敗する場合も、PHPが作るファイルの所有者が運用方針と合わない場合もあります。
FS_METHODを使うなら、サーバー管理者が推奨する方法、対象ディレクトリ、所有者、更新後に作られるファイルの所有者を確認します。別サイトで動いた定義を、そのままコピーしません。
接続情報の保存範囲を確認する
request_filesystem_credentials()は、入力した接続先、利用者名、接続方式をWordPressの設定へ保存しますが、パスワードとSSH鍵は保存対象から外します。更新のたびにパスワードを求められることは、この処理に沿った動きです。
一方、FTP_HOST、FTP_USER、FTP_PASSなどをwp-config.phpへ定義すれば、WordPressはその値を使います。パスワードを設定ファイルへ書けば、ファイルとバックアップの中に秘密情報が残ります。入力画面を省くことだけを目的に、認証情報を常駐させません。
設定ファイルへ置く必要がある場合は、閲覧できる人、ファイル権限、バックアップの保管先、契約終了時の削除を決めます。秘密情報の管理責任と、更新作業の担当を別々に記録します。
更新ファイルの取得失敗とは分けて調べる
接続情報の画面は、更新先のファイル操作に関するものです。更新パッケージを外部から取得できない問題とは、確認する経路が違います。
エラー文に接続先ホストやHTTP要求の失敗があるなら、WordPressから外部への通信を確認します。FTP接続情報を入れても、外部HTTP通信の遮断や名前解決の問題は直りません。反対に、更新ファイルを取得できても、更新先へ書けなければ作業は完了しません。
「更新できない」とまとめず、次の二点を記録します。
- 更新ファイルを取得できたか
- 取得したファイルを更新先へ書けたか
担当者へ依頼するときも、表示された文と止まった段階を渡します。
一つの更新対象で書き込み方法を確認する
調査では、複数の設定を同時に変えません。
- 更新しようとしたWordPress本体、テーマ、プラグインの名前と版を記録する。
- 表示された接続情報の画面またはエラーを保存する。
- データベースと必要なファイルを保存し、復旧方法を確認する。
- 更新先の所有者、グループ、権限を記録する。
- サーバー管理者へ、PHPの実行条件と推奨するファイル操作方法を確認する。
- 所有者または接続方法を一つだけ直し、同じ更新を一度実行する。
- 公開画面、管理画面、更新した機能、作成されたファイルの所有者を確認する。
作業が終わったら、使った接続方式、変更した設定、更新結果、復旧の要否を残します。接続できたことではなく、必要なファイルが更新され、サイトの機能を確認できたことを完了条件にします。
最初の一手は、FTPパスワードを探すことではありません。更新対象のパスと、現在の所有者、グループ、権限を一組で記録してください。
関連記事

