【Local by Flywheel】WordPressの「致命的なエラーをチェックするためにサイトと通信できないため～」の解決方法【画像あり】

**備忘録もかねて悩んでいる人もいるのかなと思い投稿してみました。
参考になれば幸いです。**
※Windowsの場合で紹介させてもらってます。

#エラーの出現
ポートフォリオのWordPress化にあたって、テーマエディターからPHPファイルの編集をしようとしたところ、更新ボタンを押すとこんなエラーが出て変更内容を保存できませんでした。
![画像２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/1951a227-36b5-f1d3-54db-a740130c5ad1.png)

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


これはテーマフッターの部分だけでなくPHPのファイルすべてに対して更新ボタンを押すと出てきます。

この記事ではLocal by Flywheelを使ったローカル環境での編集にあたってどうやってこれを解決したのか紹介していきます。


ちなみにスタイルシート(cssファイル)の方は問題なく更新できます。
![画像１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/0c6955ff-ca8a-0890-9379-17ae18b3f9a1.png)


#結論：思ったより簡単に解決できた【画像あり】

解決するのにFTPなどのプロトコルを使用することはありませんでした。

また、修正の仕方は思ったよりもシンプルだったので画像付きで説明します。

##解決方法の手順１．
`エクスプローラー`を開いて`ローカルディスク(C:)`の`ユーザー`→`user`→`Local Sites`を開く

![画像４.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/0a78fc46-d5b5-973a-bc62-a6fd910c209b.png)
![画像５.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/9fd99648-2c5e-7e71-55b8-cde95bae42ab.png)
![画像６.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/c96a9bac-acca-a6d6-8d15-eb6654113642.png)

##解決方法の手順２．
中にLocal by Flywheelで設定したサイト名が入っています。僕の場合、`Portfolio`で入れているのでここをクリック。
![画像３①.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/f82d05b9-fb1c-f170-a928-4b3819b3ce1a.png)
　ちなみにこの画面を表示するのにLocal by Flywheelからも入ることができます。
![画像３②.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/84293386-0544-5e8e-ce74-6b7270cc8a66.png)
##解決方法の手順３．
`app`→`public`でWordPressのファイルへ移動します。
![画像１１.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/9d75910f-0ecd-7896-2940-b925e29550f5.png)

![画像７.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/79f855fd-7bed-5088-a0eb-7985bec4a98a.png)
##解決方法の手順４．
次に`wp-admin`→`includes`の順で移動し`file.php`を見つけます。
![画像８.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/ba0fb0f0-2ec4-7715-43d2-047cc5a8e15c.png)
![画像９.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/16e29672-7294-d125-4d22-fe8b9421ad41.png)
![画像１０.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/7c2bce65-af7f-4930-b5ce-8e5bd77c3dd5.png)
##解決方法の手順５．
`file.php`をテキストエディタで開いて500行目あたり～610行目あたりまでにある下記のコードをまとめてコメントアウトして保存すれば解決です。

	if ( $is_active && 'php' === $extension ) {

		$scrape_key   = md5( rand() );
		$transient    = 'scrape_key_' . $scrape_key;
		$scrape_nonce = strval( rand() );
		// It shouldn't take more than 60 seconds to make the two loopback requests.
		set_transient( $transient, $scrape_nonce, 60 );

		$cookies       = wp_unslash( $_COOKIE );
		$scrape_params = array(
			'wp_scrape_key'   => $scrape_key,
			'wp_scrape_nonce' => $scrape_nonce,
		);
		$headers       = array(
			'Cache-Control' => 'no-cache',
		);

		/** This filter is documented in wp-includes/class-wp-http-streams.php */
		$sslverify = apply_filters( 'https_local_ssl_verify', false );

		// 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', 'sslverify' ) );
		$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 );
		}
	}





ファイルをテキストエディタで見る方法は`file.php`を右クリックして使用しているテキストエディタを選択すればOKです。メモ帳でも修正できますが行がわからないためコメントアウトする場所を見つけにくいかもしれないです。
![画像１２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/142c74dc-954d-b023-953a-9135d4dcd658.png)


#コメントアウト後
フッター部分のphpファイルを更新すると、
![画像13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/632477/e2ffe0d7-4a66-61dc-0f08-f92f36fbae2a.png)
無事更新できたのがわかります。
調べるのは大変でしたが解決してみれば思ったよりシンプルでした。



#そもそもなぜエラーが起きるのか
このエラーが出るのはWordPressのバージョンアップで、テーマ保存時の仕組みが変わったことが原因だそうです。
また、今回編集した`file.php`はWordPressのアップデートでまた上書きされてしまうそうなので、その都度編集が必要だそうです。