WordPress 网站后台无法修改php文件,提示Scrape key check failed. Please try again.
通过对网上相关资料的研究,发现少数IDC厂家的虚拟主机在使用wordpress4.9以上版本wordpress的时候,有可能出现编辑php文件无法保存,提示Scrape key check failed. Please try again .的情况,
目前没有很好的解决办法,暂时找到的一种解决办法是:
进wordpress网站根目录,找到wp-admin/includes/file.php
下载到本地,找下以下两行代码中间的部分:大约从522行到641行,
开头 if ( $is_active && 'php' === $extension ) {
结尾 return new WP_Error( 'php_error', $message, $result );
将其删除即可解决问题,
-
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 );}}
转载请注明:⎛山滚网络⎞ » WordPress 网站后台无法修改php文件,提示Scrape key check failed. Please try again.

