update_mod_rewrite_rules() WPSCache 1.0
Хуков нет.
Возвращает
Null. Ничего.
Использование
update_mod_rewrite_rules( $add_rules );
Код update_mod_rewrite_rules() update mod rewrite rules WPSCache 1.7.1
<?php
function update_mod_rewrite_rules( $add_rules = true ) {
global $cache_path, $update_mod_rewrite_rules_error;
$update_mod_rewrite_rules_error = false;
if ( defined( "DO_NOT_UPDATE_HTACCESS" ) ) {
$update_mod_rewrite_rules_error = ".htaccess update disabled by admin: DO_NOT_UPDATE_HTACCESS defined";
return false;
}
if ( ! function_exists( 'get_home_path' ) ) {
include_once( ABSPATH . 'wp-admin/includes/file.php' ); // get_home_path()
include_once( ABSPATH . 'wp-admin/includes/misc.php' ); // extract_from_markers()
}
$home_path = trailingslashit( get_home_path() );
$home_root = parse_url( get_bloginfo( 'url' ) );
$home_root = isset( $home_root[ 'path' ] ) ? trailingslashit( $home_root[ 'path' ] ) : '/';
if (
$home_root == '/' &&
$home_path != $_SERVER[ 'DOCUMENT_ROOT' ]
) {
$home_path = $_SERVER[ 'DOCUMENT_ROOT' ];
} elseif (
$home_root != '/' &&
$home_path != str_replace( '//', '/', $_SERVER[ 'DOCUMENT_ROOT' ] . $home_root ) &&
is_dir( $_SERVER[ 'DOCUMENT_ROOT' ] . $home_root )
) {
$home_path = str_replace( '//', '/', $_SERVER[ 'DOCUMENT_ROOT' ] . $home_root );
}
$home_path = trailingslashit( $home_path );
if ( ! file_exists( $home_path . ".htaccess" ) ) {
$update_mod_rewrite_rules_error = ".htaccess not found: {$home_path}.htaccess";
return false;
}
$generated_rules = wpsc_get_htaccess_info();
$existing_rules = implode( "\n", extract_from_markers( $home_path . '.htaccess', 'WPSuperCache' ) );
$rules = $add_rules ? $generated_rules[ 'rules' ] : '';
if ( $existing_rules == $rules ) {
$update_mod_rewrite_rules_error = "rules have not changed";
return true;
}
if ( $generated_rules[ 'wprules' ] == '' ) {
$update_mod_rewrite_rules_error = "WordPress rules empty";
return false;
}
if ( empty( $rules ) ) {
return insert_with_markers( $home_path . '.htaccess', 'WPSuperCache', array() );
}
$url = trailingslashit( get_bloginfo( 'url' ) );
$original_page = wp_remote_get( $url, array( 'timeout' => 60, 'blocking' => true ) );
if ( is_wp_error( $original_page ) ) {
$update_mod_rewrite_rules_error = "Problem loading page";
return false;
}
$backup_filename = $cache_path . 'htaccess.' . mt_rand() . ".php";
$backup_file_contents = file_get_contents( $home_path . '.htaccess' );
file_put_contents( $backup_filename, "<" . "?php die(); ?" . ">" . $backup_file_contents );
$existing_gzip_rules = implode( "\n", extract_from_markers( $cache_path . '.htaccess', 'supercache' ) );
if ( $existing_gzip_rules != $generated_rules[ 'gziprules' ] ) {
insert_with_markers( $cache_path . '.htaccess', 'supercache', explode( "\n", $generated_rules[ 'gziprules' ] ) );
}
$wprules = extract_from_markers( $home_path . '.htaccess', 'WordPress' );
wpsc_remove_marker( $home_path . '.htaccess', 'WordPress' ); // remove original WP rules so SuperCache rules go on top
if ( insert_with_markers( $home_path . '.htaccess', 'WPSuperCache', explode( "\n", $rules ) ) && insert_with_markers( $home_path . '.htaccess', 'WordPress', $wprules ) ) {
$new_page = wp_remote_get( $url, array( 'timeout' => 60, 'blocking' => true ) );
$restore_backup = false;
if ( is_wp_error( $new_page ) ) {
$restore_backup = true;
$update_mod_rewrite_rules_error = "Error testing page with new .htaccess rules: " . $new_page->get_error_message() . ".";
wp_cache_debug( 'update_mod_rewrite_rules: failed to update rules. error fetching second page: ' . $new_page->get_error_message() );
} elseif ( $new_page[ 'body' ] != $original_page[ 'body' ] ) {
$restore_backup = true;
$update_mod_rewrite_rules_error = "Page test failed as pages did not match with new .htaccess rules.";
wp_cache_debug( 'update_mod_rewrite_rules: failed to update rules. page test failed as pages did not match. Files dumped in ' . $cache_path . ' for inspection.' );
wp_cache_debug( 'update_mod_rewrite_rules: original page: 1-' . md5( $original_page[ 'body' ] ) . '.txt' );
wp_cache_debug( 'update_mod_rewrite_rules: new page: 1-' . md5( $new_page[ 'body' ] ) . '.txt' );
file_put_contents( $cache_path . '1-' . md5( $original_page[ 'body' ] ) . '.txt', $original_page[ 'body' ] );
file_put_contents( $cache_path . '2-' . md5( $new_page[ 'body' ] ) . '.txt', $new_page[ 'body' ] );
}
if ( $restore_backup ) {
global $wp_cache_debug;
file_put_contents( $home_path . '.htaccess', $backup_file_contents );
unlink( $backup_filename );
if ( $wp_cache_debug ) {
$update_mod_rewrite_rules_error .= "<br />See debug log for further details";
} else {
$update_mod_rewrite_rules_error .= "<br />Enable debug log on Debugging page for further details and try again";
}
return false;
}
} else {
file_put_contents( $home_path . '.htaccess', $backup_file_contents );
unlink( $backup_filename );
$update_mod_rewrite_rules_error = "problem inserting rules in .htaccess and original .htaccess restored";
return false;
}
return true;
}