php检查致死报错,黑米网络发现WordPress后台无法保存修改模板错误:未能与站点联系来检查致命错误,因此PHP修改已被回滚BUG修复...

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 = __( 'An unidentified error has occurred.' );

} else {

$message = $result['message'];

unset( $result['message'] );

}

return new WP_Error( 'php_error', $message, $result );

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值