wp_cache_get_ob() │ WPSCache 1.0
Hooks from the function
Return
null
. Nothing.
Usage
wp_cache_get_ob( $buffer );
- $buffer (required) (passed by reference — &)
- -
Code of wp_cache_get_ob() wp cache get ob WPSCache 1.7.7
<?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; } }