wp_cache_get_ob()WPSCache 1.0

Return

null. Nothing (null).

Usage

wp_cache_get_ob( $buffer );
$buffer (required) (passed by reference — &)
-

wp_cache_get_ob() code WPSCache 1.12.0

<?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 ( wpsc_is_get_query() || 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() == '' && ! wpsc_is_get_query() ) {
			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;
	$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' );
			fwrite( $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' );
			fwrite( $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 );
				fwrite( $fr, '<?php die(); ?>' . $gzdata );
			}
		} elseif ( $fr ) { // no compression
			wp_cache_debug( 'Writing non-gzipped buffer to wp-cache cache file.' );
			fwrite( $fr, '<?php die(); ?>' . $buffer );
		}
		if ( $fr2 ) {
			wp_cache_debug( 'Writing non-gzipped buffer to supercache file.' );
			wp_cache_add_to_buffer( $buffer, 'super cache' );
			fwrite( $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;
	}
}