ブログ初心者必見!phpが更新できない人へ

Wordpress

こんにちは、ぱらゴリです。今回はWordpressをカスタマイズしようとした際に、

ブログなどから拾ってきた○○.phpへコードを貼り付け、更新を押したところ…

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

というエラーメッセージが表示され、カスタマイズができないという状況に合い、Google先生に相談してもなかなか解決せず、苦労しました。

そのため今回は、解決策について簡単に説明させていただきます!

・ WordPress 5.3(Gutenberg、最新版)を使用中
・ X-serverを使っている方のFTPへアクセスする方法です!
スポンサーリンク

1.エラーメッセージの意味は?

WordPress4.9で追加されたコーディング機能の強化という新機能です。

初心者からすれば、「致命的なエラー」!?

いじってはいけないものをいじってしまったのかな…と不安になってしまいますよね。

でも大丈夫!みんな出てます!

2.どうやって直すの?

Google先生を使って、ブログを調べたところ…

結構たくさん出てきますね!この中のほとんどのサイトに書いてある内容を要約すると

FFTPかSSHでwp-admin/includes/file.php

該当箇所の492〜599行目をコメントアウトしましょう!

それができない場合はFTPソフトを使って、

FTP経由でファイルをダウンロード→編集→アップロードという手順で編集しましょう!

とのこと・・・暗号かよ!!誰がわかるんだよ!!と叫びました。

次はこの暗号の解読を行いたいと思います!

3.FTPってどうやって使うの?

FTPからwp-admin > includes > file.php というところまでたどり着かなければこの問題は解決しません。

それではFTPってどうやって使うのでしょうか?

3-1 X-serverのログイン画面からファイルマネージャへ

 

Google ChromeやSafariで「X-server」と検索しX-serverのサイトへジャンプ。

Xserverログイン

パスワードは契約時に送られてきたメールに記載されています!

アカウントメール

X-serverログイン後の流れ

言葉じゃわかりにくいので画像で流れを説明します!

ログイン画面1

まずご自身のブログURLをクリックしましょう。すると下の画面にいきます。

ログイン画面2

次にpublic.htmlをクリックしましょう!

ログイン画面3

ここでやっとブログによく書いてあるwp-adminにたどり着きました!

そしてincludesをクリック!

ログイン画面4

file.phpを探して✔️を入れましょう!

ログイン画面5

そして上に戻って、編集ボタンをクリックしましょう!

ログイン画面6

上4分の1くらいにある下記の文章を見つけ出してください!(ここは努力です!!笑

そして下記の文章に/*ここからコメントアウト をコピーして

if ( $is_active && ‘php’ === $extension ) { 

の上にEnterで空欄の段を作ってペーストします。

/*ここからコメントアウト
if ( $is_active && ‘php’ === $extension ) {
$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 );
}
}
ここまでコメントアウト */

return new WP_Error( ‘php_error’, $message, $result );
}
}

の下にEnterで空欄の段落を作ってから ここまでコメントアウト */をペーストします!

まとめ

いかがでしたでしょうか?

私はこの作業にたどり着くまでに半日以上を要しました笑

カスタマイズをする上で、必ずやっておいた方が良い作業ですので、行き詰まりましたら参考にしていただけますと時短になるかと思いますのでぜひ参考にしてください!

 

今回はphpでエラーが出てしまう時の対処方法でした!

最後までありがとうございました。
スポンサーリンク
Wordpress
ぱられるゴリラ

コメント