wp_cache_get_ob() WPSCache 1.0
Возвращает
Null. Ничего.
Использование
wp_cache_get_ob( $buffer );
Код wp_cache_get_ob() wp cache get ob WPSCache 1.7.1
<?php
function wp_cache_get_ob(&$buffer) {
global $cache_enabled, $cache_path, $cache_filename, $wp_start_time, $supercachedir;
global $new_cache, $wp_cache_meta, $cache_compression, $wp_super_cache_query;
global $wp_cache_gzip_encoding, $super_cache_enabled;
global $gzsize, $supercacheonly;
global $blog_cache_dir, $wp_supercache_cache_list;
global $wp_cache_not_logged_in, $cache_max_time;
global $wp_cache_is_home, $wp_cache_front_page_checks, $wp_cache_mfunc_enabled;
if ( isset( $wp_cache_mfunc_enabled ) == false )
$wp_cache_mfunc_enabled = 0;
$new_cache = true;
$wp_cache_meta = array();
/* Mode paranoic, check for closing tags
* we avoid caching incomplete files */
if ( $buffer == '' ) {
$new_cache = false;
if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) {
wp_cache_debug( "Buffer is blank. Output buffer may have been corrupted by another plugin or this is a redirected URL. Look for text 'ob_start' in the files of your plugins directory.", 2 );
wp_cache_add_to_buffer( $buffer, "Page not cached by WP Super Cache. Blank Page. Check output buffer usage by plugins." );
}
}
if ( isset( $wp_super_cache_query[ 'is_404' ] ) && false == apply_filters( 'wpsupercache_404', false ) ) {
$new_cache = false;
if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) {
wp_cache_debug( '404 file not found not cached', 2 );
wp_cache_add_to_buffer( $buffer, "Page not cached by WP Super Cache. 404." );
}
}
if ( !preg_match( apply_filters( 'wp_cache_eof_tags', '/(<\/html>|<\/rss>|<\/feed>|<\/urlset|<\?xml)/i' ), $buffer ) ) {
$new_cache = false;
if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) {
wp_cache_debug( 'No closing html tag. Not caching.', 2 );
wp_cache_add_to_buffer( $buffer, "Page not cached by WP Super Cache. No closing HTML tag. Check your theme." );
}
}
if( !$new_cache )
return wp_cache_maybe_dynamic( $buffer );
$duration = wp_cache_microtime_diff($wp_start_time, microtime());
$duration = sprintf("%0.3f", $duration);
wp_cache_add_to_buffer( $buffer, "Dynamic page generated in $duration seconds." );
if( !wp_cache_writers_entry() ) {
wp_cache_add_to_buffer( $buffer, "Page not cached by WP Super Cache. Could not get mutex lock." );
wp_cache_debug( 'Could not get mutex lock. Not caching.', 1 );
return wp_cache_maybe_dynamic( $buffer );
}
if ( $wp_cache_not_logged_in && isset( $wp_super_cache_query[ 'is_feed' ] ) ) {
wp_cache_debug( 'Feed detected. Writing wpcache cache files.', 5 );
$wp_cache_not_logged_in = false;
}
$home_url = parse_url( trailingslashit( get_bloginfo( 'url' ) ) );
$dir = get_current_url_supercache_dir();
$supercachedir = $cache_path . 'supercache/' . preg_replace('/:.*$/', '', $home_url[ 'host' ]);
if ( ! empty( $_GET ) || isset( $wp_super_cache_query[ 'is_feed' ] ) || ( $super_cache_enabled == true && is_dir( substr( $supercachedir, 0, -1 ) . '.disabled' ) ) ) {
wp_cache_debug( 'Supercache disabled: GET or feed detected or disabled by config.', 2 );
$super_cache_enabled = false;
}
$tmp_wpcache_filename = $cache_path . uniqid( mt_rand(), true ) . '.tmp';
if ( defined( 'WPSC_SUPERCACHE_ONLY' ) ) {
$supercacheonly = true;
wp_cache_debug( 'wp_cache_get_ob: WPSC_SUPERCACHE_ONLY defined. Only creating supercache files.' );
} else {
$supercacheonly = false;
}
if( $super_cache_enabled ) {
if ( wp_cache_get_cookies_values() == '' && empty( $_GET ) ) {
wp_cache_debug( 'Anonymous user detected. Only creating Supercache file.', 3 );
$supercacheonly = true;
}
}
$cache_error = '';
if ( wpsc_is_caching_user_disabled() ) {
$super_cache_enabled = false;
$cache_enabled = false;
$cache_error = 'Not caching requests by known users. (See Advanced Settings page)';
wp_cache_debug( 'Not caching for known user.', 5 );
}
if ( !$cache_enabled ) {
wp_cache_debug( 'Cache is not enabled. Sending buffer to browser.', 5 );
wp_cache_writers_exit();
wp_cache_add_to_buffer( $buffer, "Page not cached by WP Super Cache. Check your settings page. $cache_error" );
if ( $wp_cache_mfunc_enabled == 1 ) {
global $wp_super_cache_late_init;
if ( false == isset( $wp_super_cache_late_init ) || ( isset( $wp_super_cache_late_init ) && $wp_super_cache_late_init == 0 ) )
wp_cache_add_to_buffer( $buffer, 'Super Cache dynamic page detected but $wp_super_cache_late_init not set. See the readme.txt for further details.' );
}
return wp_cache_maybe_dynamic( $buffer );
}
if( @is_dir( $dir ) == false )
@wp_mkdir_p( $dir );
$dir = wpsc_get_realpath( $dir );
if ( ! $dir ) {
wp_cache_debug( 'wp_cache_get_ob: not caching as directory does not exist.' );
return $buffer;
}
$dir = trailingslashit( $dir );
if ( ! wpsc_is_in_cache_directory( $dir ) ) {
wp_cache_debug( "wp_cache_get_ob: not caching as directory is not in cache_path: $dir" );
return $buffer;
}
$fr = $fr2 = $gz = false;
// Open wp-cache cache file
if ( ! $supercacheonly ) {
$fr = @fopen( $tmp_wpcache_filename, 'w' );
if ( ! $fr ) {
wp_cache_debug( 'Error. Supercache could not write to ' . str_replace( ABSPATH, '', $cache_path ) . $cache_filename, 1 );
wp_cache_add_to_buffer( $buffer, "File not cached! Super Cache Couldn't write to: " . str_replace( ABSPATH, '', $cache_path ) . $cache_filename );
wp_cache_writers_exit();
return wp_cache_maybe_dynamic( $buffer );
}
} else {
$user_info = wp_cache_get_cookies_values();
$do_cache = apply_filters( 'do_createsupercache', $user_info );
if (
$super_cache_enabled &&
(
$user_info == '' ||
$do_cache === true
)
) {
$cache_fname = $dir . supercache_filename();
$tmp_cache_filename = $dir . uniqid( mt_rand(), true ) . '.tmp';
$fr2 = @fopen( $tmp_cache_filename, 'w' );
if ( !$fr2 ) {
wp_cache_debug( 'Error. Supercache could not write to ' . str_replace( ABSPATH, '', $tmp_cache_filename ), 1 );
wp_cache_add_to_buffer( $buffer, "File not cached! Super Cache Couldn't write to: " . str_replace( ABSPATH, '', $tmp_cache_filename ) );
@fclose( $fr );
@unlink( $tmp_wpcache_filename );
wp_cache_writers_exit();
return wp_cache_maybe_dynamic( $buffer );
} elseif (
$cache_compression &&
(
! isset( $wp_cache_mfunc_enabled ) ||
$wp_cache_mfunc_enabled == 0
)
) { // don't want to store compressed files if using dynamic content
$gz = @fopen( $tmp_cache_filename . ".gz", 'w');
if ( !$gz ) {
wp_cache_debug( 'Error. Supercache could not write to ' . str_replace( ABSPATH, '', $tmp_cache_filename ) . ".gz", 1 );
wp_cache_add_to_buffer( $buffer, "File not cached! Super Cache Couldn't write to: " . str_replace( ABSPATH, '', $tmp_cache_filename ) . ".gz" );
@fclose( $fr );
@unlink( $tmp_wpcache_filename );
@fclose( $fr2 );
@unlink( $tmp_cache_filename );
wp_cache_writers_exit();
return wp_cache_maybe_dynamic( $buffer );
}
}
}
}
$added_cache = 0;
$oc_key = get_oc_key();
$buffer = apply_filters( 'wpsupercache_buffer', $buffer );
wp_cache_append_tag( $buffer );
/*
* Dynamic content enabled: write the buffer to a file and then process any templates found using
* the wpsc_cachedata filter. Buffer is then returned to the visitor.
*/
if ( $wp_cache_mfunc_enabled == 1 ) {
if ( preg_match( '/<!--mclude|<!--mfunc|<!--dynamic-cached-content-->/', $buffer ) ) { //Dynamic content
wp_cache_debug( 'mfunc/mclude/dynamic-cached-content tags have been retired. Please update your theme. See docs for updates.' );
wp_cache_add_to_buffer( $buffer, "Warning! Obsolete mfunc/mclude/dynamic-cached-content tags found. Please update your theme. See http://ocaoimh.ie/y/5b for more information." );
}
global $wp_super_cache_late_init;
if ( false == isset( $wp_super_cache_late_init ) || ( isset( $wp_super_cache_late_init ) && $wp_super_cache_late_init == 0 ) )
wp_cache_add_to_buffer( $buffer, 'Super Cache dynamic page detected but late init not set. See the readme.txt for further details.' );
if ( $fr ) { // wpcache caching
wp_cache_debug( 'Writing dynamic buffer to wpcache file.' );
wp_cache_add_to_buffer( $buffer, "Dynamic WPCache Super Cache" );
fputs( $fr, '<?php die(); ?>' . $buffer );
} elseif ( isset( $fr2 ) ) { // supercache active
wp_cache_debug( 'Writing dynamic buffer to supercache file.' );
wp_cache_add_to_buffer( $buffer, "Dynamic Super Cache" );
fputs( $fr2, $buffer );
}
$wp_cache_meta[ 'dynamic' ] = true;
if ( $wp_cache_mfunc_enabled == 1 && do_cacheaction( 'wpsc_cachedata_safety', 0 ) === 1 ) {
$buffer = do_cacheaction( 'wpsc_cachedata', $buffer ); // dynamic content for display
}
if ( $cache_compression && $wp_cache_gzip_encoding ) {
wp_cache_debug( 'Gzipping dynamic buffer for display.', 5 );
wp_cache_add_to_buffer( $buffer, "Compression = gzip" );
$gzdata = gzencode( $buffer, 6, FORCE_GZIP );
$gzsize = function_exists( 'mb_strlen' ) ? mb_strlen( $gzdata, '8bit' ) : strlen( $gzdata );
}
} else {
if ( defined( 'WPSC_VARY_HEADER' ) ) {
if ( WPSC_VARY_HEADER != '' ) {
$vary_header = WPSC_VARY_HEADER;
} else {
$vary_header = '';
}
} else {
$vary_header = 'Accept-Encoding, Cookie';
}
if ( $vary_header ) {
$wp_cache_meta[ 'headers' ][ 'Vary' ] = 'Vary: ' . $vary_header;
}
if ( $gz || $wp_cache_gzip_encoding ) {
wp_cache_debug( 'Gzipping buffer.', 5 );
wp_cache_add_to_buffer( $buffer, "Compression = gzip" );
$gzdata = gzencode( $buffer, 6, FORCE_GZIP );
$gzsize = function_exists( 'mb_strlen' ) ? mb_strlen( $gzdata, '8bit' ) : strlen( $gzdata );
$wp_cache_meta[ 'headers' ][ 'Content-Encoding' ] = 'Content-Encoding: ' . $wp_cache_gzip_encoding;
// Return uncompressed data & store compressed for later use
if ( $fr ) {
wp_cache_debug( 'Writing gzipped buffer to wp-cache cache file.', 5 );
fputs($fr, '<?php die(); ?>' . $gzdata);
}
} else { // no compression
if ( $fr ) {
wp_cache_debug( 'Writing non-gzipped buffer to wp-cache cache file.' );
fputs($fr, '<?php die(); ?>' . $buffer);
}
}
if ( $fr2 ) {
wp_cache_debug( 'Writing non-gzipped buffer to supercache file.' );
wp_cache_add_to_buffer( $buffer, "super cache" );
fputs($fr2, $buffer );
}
if ( isset( $gzdata ) && $gz ) {
wp_cache_debug( 'Writing gzipped buffer to supercache file.' );
fwrite($gz, $gzdata );
}
}
$new_cache = true;
if ( $fr ) {
$supercacheonly = false;
fclose( $fr );
if ( filesize( $tmp_wpcache_filename ) == 0 ) {
wp_cache_debug( "Warning! The file $tmp_wpcache_filename was empty. Did not rename to {$dir}{$cache_filename}", 5 );
@unlink( $tmp_wpcache_filename );
} else {
if ( ! @rename( $tmp_wpcache_filename, $dir . $cache_filename ) ) {
if ( false == is_dir( $dir ) ) {
@wp_mkdir_p( $dir );
}
@unlink( $dir . $cache_filename );
@rename( $tmp_wpcache_filename, $dir . $cache_filename );
}
if ( file_exists( $dir . $cache_filename ) ) {
wp_cache_debug( "Renamed temp wp-cache file to {$dir}{$cache_filename}", 5 );
} else {
wp_cache_debug( "FAILED to rename temp wp-cache file to {$dir}{$cache_filename}", 5 );
}
$added_cache = 1;
}
}
if ( $fr2 ) {
fclose( $fr2 );
if ( $wp_cache_front_page_checks && $cache_fname == $supercachedir . $home_url[ 'path' ] . supercache_filename() && !( $wp_cache_is_home ) ) {
wp_cache_writers_exit();
wp_cache_debug( 'Warning! Not writing another page to front page cache.', 1 );
return $buffer;
} elseif ( filesize( $tmp_cache_filename ) == 0 ) {
wp_cache_debug( "Warning! The file $tmp_cache_filename was empty. Did not rename to {$cache_fname}", 5 );
@unlink( $tmp_cache_filename );
} else {
if ( ! @rename( $tmp_cache_filename, $cache_fname ) ) {
@unlink( $cache_fname );
@rename( $tmp_cache_filename, $cache_fname );
}
wp_cache_debug( "Renamed temp supercache file to $cache_fname", 5 );
$added_cache = 1;
}
}
if ( $gz ) {
fclose( $gz );
if ( filesize( $tmp_cache_filename . '.gz' ) == 0 ) {
wp_cache_debug( "Warning! The file {$tmp_cache_filename}.gz was empty. Did not rename to {$cache_fname}.gz", 5 );
@unlink( $tmp_cache_filename . '.gz' );
} else {
if ( ! @rename( $tmp_cache_filename . '.gz', $cache_fname . '.gz' ) ) {
@unlink( $cache_fname . '.gz' );
@rename( $tmp_cache_filename . '.gz', $cache_fname . '.gz' );
}
wp_cache_debug( "Renamed temp supercache gz file to {$cache_fname}.gz", 5 );
$added_cache = 1;
}
}
if ( $added_cache && isset( $wp_supercache_cache_list ) && $wp_supercache_cache_list ) {
update_option( 'wpsupercache_count', ( get_option( 'wpsupercache_count' ) + 1 ) );
$last_urls = (array)get_option( 'supercache_last_cached' );
if ( count( $last_urls ) >= 10 )
$last_urls = array_slice( $last_urls, 1, 9 );
$last_urls[] = array( 'url' => preg_replace( '/[ <>\'\"\r\n\t\(\)]/', '', $_SERVER[ 'REQUEST_URI' ] ), 'date' => date( 'Y-m-d H:i:s' ) );
update_option( 'supercache_last_cached', $last_urls );
}
wp_cache_writers_exit();
if ( !headers_sent() && $wp_cache_gzip_encoding && $gzdata) {
wp_cache_debug( 'Writing gzip content headers. Sending buffer to browser', 5 );
header( 'Content-Encoding: ' . $wp_cache_gzip_encoding );
if ( defined( 'WPSC_VARY_HEADER' ) ) {
if ( WPSC_VARY_HEADER != '' ) {
$vary_header = WPSC_VARY_HEADER;
} else {
$vary_header = '';
}
} else {
$vary_header = 'Accept-Encoding, Cookie';
}
if ( $vary_header ) {
header( 'Vary: ' . $vary_header );
}
header( 'Content-Length: ' . $gzsize );
return $gzdata;
} else {
wp_cache_debug( 'Sending buffer to browser', 5 );
return $buffer;
}
}