つばくろぐ @takamii228

知は力なり

WordPress 4.9.x系で管理画面でのテーマ編集に失敗した(解決済み)

WordPress 4.9.x系で管理画面でのテーマ編集に失敗した

f:id:takamii228:20180319193448p:plain:w300

WordPressを4.9.4にアップデートしてから、管理画面からテーマファイルを更新しようとしたら以下の警告が出た。

f:id:takamii228:20180319191402p:plain

そのまま押し切って更新しようとしたら以下のエラーがでて失敗した。

f:id:takamii228:20180319191426p:plain

エラー文言は以下の通り。

日本語版

致命的なエラーをチェックするためにサイトと通信できないため、PHP の変更は取り消されました。SFTP を使うなど、他の手段で PHP ファイルの変更をアップロードする必要があります。

英語版

Unable to communicate back with site to check for fatal errors, so the PHP change was reverted. You will need to upload your PHP file change by some other means, such as by using SFTP.

どうやら4.9.x系で強化されてたファイルチェック周りが原因っぽい。

https://wpdocs.osdn.jp/Version_4.

安全のためのサンドボックス

真っ白な画面は非常に恐ろしいですね。WordPress 4.9はエラーがある状態で保存すると警告するので、テーマやプラグインに取り組んでいるときに白い画面を避けられるでしょう。夜はもっとよく眠れますね。

-

潜在的な危険を警告

テーマやプラグインを直接編集すると、WordPress 4.9はそれが危険なやり方だと警告します。そしてファイルを改変する前にバックアップするように勧めます。安全なルートを選べば、後から自分自身もチームと顧客もあなたに感謝することでしょう。

解決策

エラー文言でいろいろ調べたら どうやらwp-admin/includes/file.phpでファイルを更新するときに自分自身へリクエストを投げて正常終了するかどうか確認していた。

https://github.com/WordPress/WordPress/blob/master/wp-admin/includes/file.php

このリクエスト経路を見直してみたら、ポート番号がブラウザ(8000)コンテナ(8000→80)Apache(80)になってた。

WordPressのホスト名的には8000番ポートが入ってたのでApacheの8000番が空いてなくてエラーになったのが原因だった。

ブラウザ(8000)コンテナ(8000→8000)Apache(8000)になるように直したら無事更新できた。

WordPressは予約投稿や今回みたいな自分自身にリクエスト投げてきて処理をするやつが結構あるので、CDN・LB・リバプロ・IP制限などを間に挟んでいる構成ではその辺の経路がうまく通ってないとハマるので注意が必要だ。

qiita.com