ワードプレス(WordPress)で「致命的なエラーをチェックするためにサイトと通信できないため、PHP の変更は取り消されました。」時の対処方法
WordPress4.9以降から管理画面内で「致命的なエラーをチェックするためにサイトと通信できないため、PHP の変更は取り消されました。」なるエラーが出るようになりました。このエラーが出るとテーマやプラグインの更新ができなくなります。それでは何かと大変なので、ひとまずこのエラーが出なくなる方法を紹介します。(あくまでもその場しのぎですが。。。)
管理画面内、「外観」から「テーマの編集」のページ内でテーマなどをいじっている時に出るエラー表示に「致命的なエラーをチェックするためにサイトと通信できないため、PHP の変更は取り消されました。」があります。これが出てしまうとphpのファイルの上書きができなくなります。何が原因なのかはさておき、このエラー表示を無くして作業を進めたい時もあるでしょう。急場凌ぎではありますが、このエラー表示が出なくなる方法は、wp-admin/includes/file.phpのファイルをFTPでダウンロードし、修正をしましょう。場所はバージョンによっても異なりますが、バージョン5.2.3のファイルでは495行〜602行までをコメントアウトしましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
if ( $is_active && 'php' === $extension ) { //ここが495行です。ここから「/*」のコメントアウトをしてください。 $scrape_key = md5( rand() ); $transient = 'scrape_key_' . $scrape_key; $scrape_nonce = strval( rand() ); set_transient( $transient, $scrape_nonce, 60 ); // It shouldn't take more than 60 seconds to make the two loopback requests. $cookies = wp_unslash( $_COOKIE ); $scrape_params = array( 'wp_scrape_key' => $scrape_key, 'wp_scrape_nonce' => $scrape_nonce, ); $headers = array( 'Cache-Control' => 'no-cache', ); // Include Basic auth in loopback requests. if ( isset( $_SERVER['PHP_AUTH_USER'] ) && isset( $_SERVER['PHP_AUTH_PW'] ) ) { $headers['Authorization'] = 'Basic ' . base64_encode( wp_unslash( $_SERVER['PHP_AUTH_USER'] ) . ':' . wp_unslash( $_SERVER['PHP_AUTH_PW'] ) ); } // Make sure PHP process doesn't die before loopback requests complete. @set_time_limit( 300 ); // Time to wait for loopback requests to finish. $timeout = 100; $needle_start = "###### wp_scraping_result_start:$scrape_key ######"; $needle_end = "###### wp_scraping_result_end:$scrape_key ######"; // Attempt loopback request to editor to see if user just whitescreened themselves. if ( $plugin ) { $url = add_query_arg( compact( 'plugin', 'file' ), admin_url( 'plugin-editor.php' ) ); } elseif ( isset( $stylesheet ) ) { $url = add_query_arg( array( 'theme' => $stylesheet, 'file' => $file, ), admin_url( 'theme-editor.php' ) ); } else { $url = admin_url(); } $url = add_query_arg( $scrape_params, $url ); $r = wp_remote_get( $url, compact( 'cookies', 'headers', 'timeout' ) ); $body = wp_remote_retrieve_body( $r ); $scrape_result_position = strpos( $body, $needle_start ); $loopback_request_failure = array( 'code' => 'loopback_request_failed', 'message' => __( '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.' ), ); $json_parse_failure = array( 'code' => 'json_parse_error', ); $result = null; if ( false === $scrape_result_position ) { $result = $loopback_request_failure; } else { $error_output = substr( $body, $scrape_result_position + strlen( $needle_start ) ); $error_output = substr( $error_output, 0, strpos( $error_output, $needle_end ) ); $result = json_decode( trim( $error_output ), true ); if ( empty( $result ) ) { $result = $json_parse_failure; } } // 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 ); $r = wp_remote_get( $url, compact( 'cookies', 'headers', 'timeout' ) ); $body = wp_remote_retrieve_body( $r ); $scrape_result_position = strpos( $body, $needle_start ); if ( false === $scrape_result_position ) { $result = $loopback_request_failure; } else { $error_output = substr( $body, $scrape_result_position + strlen( $needle_start ) ); $error_output = substr( $error_output, 0, strpos( $error_output, $needle_end ) ); $result = json_decode( trim( $error_output ), true ); if ( empty( $result ) ) { $result = $json_parse_failure; } } } delete_transient( $transient ); if ( true !== $result ) { // Roll-back file change. file_put_contents( $real_file, $previous_content ); if ( function_exists( 'opcache_invalidate' ) ) { opcache_invalidate( $real_file, true ); } if ( ! isset( $result['message'] ) ) { $message = __( 'Something went wrong.' ); } else { $message = $result['message']; unset( $result['message'] ); } return new WP_Error( 'php_error', $message, $result ); } } if ( $theme instanceof WP_Theme ) { $theme->cache_delete(); } //ここが602行です。ここまで「*/」のコメントアウトで閉じてください。 |
※ただし、これはあくまでも急場凌ぎです。ちゃんとファイルのバックアップを取って自己責任で対応してください。また。新しいバージョンになった場合は元に戻ります。バージョンアップの際はその都度、この対応策をしなくてはならないので根本的な解決にはならないと思います。根本的なエラーの原因を究明した方が良いでしょう。
関連リンク:WordPress テーマやプラグインが管理画面から更新できない場合の対処法 - Qiita
関連リンク:【Wordpress】「致命的なエラーをチェックするためにサイトと通信できないため、PHP の変更は取り消されました。」というエラーが出て更新ができないとき - takeblo