SOFTELメモ Developer's blog

[WordPress] 致命的なエラーをチェックするためにサイトと通信できないため、PHP の変更は取り消されました。(2)

2025/03/06 WordPress

問題

WordPressのテーマエディタでphpファイルを更新しようとすると以下のエラーになります。

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

管理画面で編集できたほうが便利なのですが、何が原因でしょうか。

答え

(追記)原因は wp-content/object-cache.php でした。(末尾に記載)

APCu関連のカスタマイズを外すと発生しなくなるかもしれません。


WordPressの管理画面のテーマファイルエディター、プラグインファイルエディターでphpファイルを編集すると、念のため、エラーが発生していないかWordPressが確認します。

対象のファイルを書き換える、管理画面のphpでチェックする、トップページもエラーで真っ白になったりしていないチェックする。途中で問題があれば元に戻す。

そんなことをしている。

私が見た事例だと、1回目のエラーチェックはうまくいったあとで、2回目のトップページのエラーのチェックが失敗し、問題のエラーで終わるという流れになっていた。

応急処置

ひとまず、影響が小さそうなか所で対応するならば、少し引き返して、

wp-admin/includes/file.php の wp_edit_theme_plugin_file() の中で対応するとよさそう。

wp_edit_theme_plugin_file() の終盤の、トップページにアクセスしている箇所が問題であるならば、以下のようにスキップしてしまうなど。

wp-admin/includes/file.php 610行目付近

変更前)
        // Try making request to homepage as well to see if visitors have been whitescreened.
        if ( true === $result ) {
            $url                    = home_url( '/' );
            $url                    = add_query_arg( $scrape_params, $url );
変更後)
        // Try making request to homepage as well to see if visitors have been whitescreened.
        if ( true === $result && false ) { // if文の中に入らないように
            $url                    = home_url( '/' );
            $url                    = add_query_arg( $scrape_params, $url );

これなら、文法チェックはしたうえで、トップページのチェックだけスキップする形。

メモ

もう少し深堀りすると、トップページのチェックをする際の、set_transient()、get_transient() がうまくいっていない様子。

set_transient()、get_transient() の中で、 wp_using_ext_object_cache() が trueになるようなので、キャッシュ関連で何かをうまくやれば解決するのかもしれません。このあたりはどうするのが正解かわからず。

メモ(後日)

自分でAPCu関連の実験でキャッシュ関連のカスタマイズを追加していたのが原因でした。

今は必要ないので wp-content/object-cache.php を削除したら、問題が解消しました。

関連するメモ

コメント