未能与站点联系来检查致命错误,因此PHP修改已被回滚。您需要采用其他方式(如SFTP)上传您修改的PHP文件

知更鸟 2020年6月11日12:16:21WordPress1 1.6K1

如果在WordPress后台主题编辑中修改模板php文件,点击更新文件时提示“未能与站点联系来检查致命错误,因此PHP修改已被回滚。您需要采用其他方式(如SFTP)上传您修改的PHP文件”。文章源自知更鸟-https://zmingcx.com/unable-to-communicate-back-with-site-to-check-for-fatal-errors.html

这个错误提示是 WordPress 4.9 之后添加的功能,检查 WP 文件编辑器中是否有PHP错误,以防止网站因修改模板文件而崩溃。文章源自知更鸟-https://zmingcx.com/unable-to-communicate-back-with-site-to-check-for-fatal-errors.html

未能与站点联系来检查致命错误,因此PHP修改已被回滚。您需要采用其他方式(如SFTP)上传您修改的PHP文件文章源自知更鸟-https://zmingcx.com/unable-to-communicate-back-with-site-to-check-for-fatal-errors.html

有人说是WP的BUG,也有人说和服务器主机环境配置有关,也有人说是主题中有不规范的代码或者是某些插件会影响编辑模板,众说不一。文章源自知更鸟-https://zmingcx.com/unable-to-communicate-back-with-site-to-check-for-fatal-errors.html

如果不准备通过FTP替换修改模板文件,可以通过修改WordPress程序文件,删除这个代码检查功能。文章源自知更鸟-https://zmingcx.com/unable-to-communicate-back-with-site-to-check-for-fatal-errors.html

以WP5.4为例,打开wp-admin/includes/file.php程序文件,删除505-616行的如下代码:文章源自知更鸟-https://zmingcx.com/unable-to-communicate-back-with-site-to-check-for-fatal-errors.html

展开收缩
文章源自知更鸟-https://zmingcx.com/unable-to-communicate-back-with-site-to-check-for-fatal-errors.html
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 );
		}
	}

文章源自知更鸟-https://zmingcx.com/unable-to-communicate-back-with-site-to-check-for-fatal-errors.html

然后替换原来文件,即可解决,删除后不会对其它功能造成影响。文章源自知更鸟-https://zmingcx.com/unable-to-communicate-back-with-site-to-check-for-fatal-errors.html

经测试,删除上述检测代码后,后台更新修改模板文件秒过。文章源自知更鸟-https://zmingcx.com/unable-to-communicate-back-with-site-to-check-for-fatal-errors.html

 文章源自知更鸟-https://zmingcx.com/unable-to-communicate-back-with-site-to-check-for-fatal-errors.html

文章源自知更鸟-https://zmingcx.com/unable-to-communicate-back-with-site-to-check-for-fatal-errors.html
另外,据报告有如下插件会造成无法后台更新修改文件:
  • Magic Fields
  • WP Spamshield
  • GeoDirectory
  • Social Login WordPress Plugin – AccessPress Social Login Lite
  • Ninja Popups for WordPress
  • Custom firewalls or security rules
  • Some custom themes
  • ShortPixel Optimizer
  • WP Server Stats
文章源自知更鸟-https://zmingcx.com/unable-to-communicate-back-with-site-to-check-for-fatal-errors.html
文章源自知更鸟 | 崇尚专注 追求极致 分享交流WordPress经验与技巧,关注前端设计与网站制作,打造自己专属的WordPress主题,让你的博客与众不同!
weinxin
版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
让 WordPress 页面支持添加分类及标签 WordPress

让 WordPress 页面支持添加分类及标签

默认WordPress页面不支持选择分类和添加标签,可以通过下面的方法为页面添加分类及标签。 将下面代码添加到当前主题函数模板functions.php中: function san_add_taxo...
自定义 WordPress 文章显示数量 WordPress

自定义 WordPress 文章显示数量

一般我们都在设置 → 阅读 → 博客页面至多显示中,统一设置每个页面的文章显示数量,如果想某些页面自定义显示数量,不受这个控制,可以通过下面的代码实现。 自定义 WordPress 文章显示数量 将下...
WordPress 在文章页以标签云形式显示文章标签 WordPress

WordPress 在文章页以标签云形式显示文章标签

大家都看过WordPress 标签小工具的标签云,标签按文章数显示不同的大小,看上去很生动,那么在文章页面是否也可以用标签云的形式调用该文章标签呢?当然是可以的。 WordPress 在文章页以标签云...
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定

评论:1   其中:访客  1   博主  0
    • badponycn
      badponycn 0

      为什么找不到file.php