function wp_super_cache_init() { global $wp_cache_key, $key, $blogcacheid, $wp_cache_request_uri, $file_prefix, $blog_cache_dir, $meta_file, $cache_file, $cache_filename, $wp_super_cache_debug, $meta_pathname, $wp_cache_gzip_encoding, $meta; $wp_cache_key = do_cacheaction('wp_cache_key', $_SERVER['HTTP_HOST'] . preg_replace('/#.*$/', '', str_replace('/index.php', '/', $wp_cache_request_uri)) . $wp_cache_gzip_encoding . wp_cache_get_cookies_values()); $key = $blogcacheid . md5($wp_cache_key); $wp_cache_key = $blogcacheid . $wp_cache_key; $cache_filename = $file_prefix . $key . '.html'; $meta_file = $file_prefix . $key . '.meta'; $cache_file = realpath($blog_cache_dir . $cache_filename); $meta_pathname = realpath($blog_cache_dir . 'meta/' . $meta_file); return compact('key', 'cache_filename', 'meta_file', 'cache_file', 'meta_pathname'); }
function wp_cache_get_ob(&$buffer) { global $cache_path, $cache_filename, $meta_file, $wp_start_time, $supercachedir; global $new_cache, $wp_cache_meta, $file_expired, $blog_id, $cache_compression; global $wp_cache_gzip_encoding, $super_cache_enabled, $cached_direct_pages; global $wp_cache_404, $gzsize, $supercacheonly, $wp_cache_gzip_first, $wp_cache_gmt_offset; global $blog_cache_dir, $wp_cache_request_uri, $wp_supercache_cache_list; $new_cache = true; $wp_cache_meta = ''; /* 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); $buffer .= "\n<!-- Page not cached by WP Super Cache. Blank Page. Check output buffer usage by plugins. -->\n"; } } if ($wp_cache_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); $buffer .= "\n<!-- Page not cached by WP Super Cache. 404. -->\n"; } } if (!preg_match('/(<\\/html>|<\\/rss>|<\\/feed>)/i', $buffer)) { $new_cache = false; if (false === strpos($_SERVER['REQUEST_URI'], 'robots.txt')) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("No closing html tag. Not caching.", 2); $buffer .= "\n<!-- Page not cached by WP Super Cache. No closing HTML tag. Check your theme. -->\n"; } } else { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("robots.txt detected. Not caching.", 2); } } } if (!$new_cache) { return $buffer; } $duration = wp_cache_microtime_diff($wp_start_time, microtime()); $duration = sprintf("%0.3f", $duration); $buffer .= "\n<!-- Dynamic page generated in {$duration} seconds. -->\n"; if (!wp_cache_writers_entry()) { $buffer .= "\n<!-- Page not cached by WP Super Cache. Could not get mutex lock. -->\n"; if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Could not get mutex lock. Not caching.", 1); } return $buffer; } $dir = get_current_url_supercache_dir(); $supercachedir = $cache_path . 'supercache/' . preg_replace('/:.*$/', '', $_SERVER["HTTP_HOST"]); if (!empty($_GET) || is_feed() || $super_cache_enabled == true && is_dir(substr($supercachedir, 0, -1) . '.disabled')) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { 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'; // Don't create wp-cache files for anon users $supercacheonly = false; if ($super_cache_enabled && wp_cache_get_cookies_values() == '') { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Anonymous user detected. Only creating Supercache file.", 3); } $supercacheonly = true; } if (!$supercacheonly) { if (!@file_exists($blog_cache_dir . $cache_filename) || @file_exists($blog_cache_dir . $cache_filename) && time() - @filemtime($blog_cache_dir . $cache_filename) > 5) { $fr = @fopen($tmp_wpcache_filename, 'w'); if (!$fr) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Error. Supercache could not write to " . str_replace(ABSPATH, '', $cache_path) . $cache_filename, 1); } $buffer .= "<!-- File not cached! Super Cache Couldn't write to: " . str_replace(ABSPATH, '', $cache_path) . $cache_filename . " -->\n"; return $buffer; } } } if ($super_cache_enabled) { $user_info = wp_cache_get_cookies_values(); $do_cache = apply_filters('do_createsupercache', $user_info); if ($user_info == '' || $do_cache === true) { if (@is_dir($dir) == false) { @wp_mkdir_p($dir); } $cache_fname = "{$dir}index.html"; $tmp_cache_filename = $dir . uniqid(mt_rand(), true) . '.tmp'; if (!@file_exists($cache_fname) || @file_exists($cache_fname) && time() - @filemtime($cache_fname) > 5) { $fr2 = @fopen($tmp_cache_filename, 'w'); if (!$fr2) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Error. Supercache could not write to " . str_replace(ABSPATH, '', $tmp_cache_filename), 1); } $buffer .= "<!-- File not cached! Super Cache Couldn't write to: " . str_replace(ABSPATH, '', $tmp_cache_filename) . " -->\n"; @fclose($fr); @unlink($tmp_wpcache_filename); return $buffer; } elseif ($cache_compression) { $gz = @fopen($tmp_cache_filename . ".gz", 'w'); if (!$gz) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Error. Supercache could not write to " . str_replace(ABSPATH, '', $tmp_cache_filename) . ".gz", 1); } $buffer .= "<!-- File not cached! Super Cache Couldn't write to: " . str_replace(ABSPATH, '', $tmp_cache_filename) . ".gz -->\n"; @fclose($fr); @unlink($tmp_wpcache_filename); @fclose($fr2); @unlink($tmp_cache_filename); return $buffer; } } } } } if (preg_match('/<!--mclude|<!--mfunc/', $buffer)) { //Dynamic content if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Dynamic content found in buffer.", 4); } $store = preg_replace('|<!--mclude (.*?)-->(.*?)<!--/mclude-->|is', "<!--mclude-->\n<?php include_once('" . ABSPATH . "\$1'); ?>\n<!--/mclude-->", $buffer); $store = preg_replace('|<!--mfunc (.*?)-->(.*?)<!--/mfunc-->|is', "<!--mfunc-->\n<?php \$1 ;?>\n<!--/mfunc-->", $store); $store = apply_filters('wpsupercache_buffer', $store); $wp_cache_meta['dynamic'] = true; /* Clean function calls in tag */ $buffer = preg_replace('|<!--mclude (.*?)-->|is', '<!--mclude-->', $buffer); $buffer = preg_replace('|<!--mfunc (.*?)-->|is', '<!--mfunc-->', $buffer); if ($fr) { fputs($fr, $store); } if ($fr2) { fputs($fr2, $store . '<!-- super cache -->'); } if ($gz) { fputs($gz, gzencode($store . '<!-- super cache gz -->', 1, FORCE_GZIP)); } } else { $buffer = apply_filters('wpsupercache_buffer', $buffer); $buffer .= "<!-- Cached page generated by WP-Super-Cache on " . gmdate('Y-m-d H:i:s', time() + $wp_cache_gmt_offset * 3600) . " -->\n"; if ($gz || $wp_cache_gzip_encoding) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Gzipping buffer.", 5); } $gzdata = gzencode($buffer . "<!-- Compression = gzip -->", 3, FORCE_GZIP); $gzsize = strlen($gzdata); } if ($wp_cache_gzip_encoding) { $wp_cache_meta['headers']['Content-Encoding'] = 'Content-Encoding: ' . $wp_cache_gzip_encoding; $wp_cache_meta['headers']['Vary'] = 'Vary: Accept-Encoding, Cookie'; // Return uncompressed data & store compressed for later use if ($fr) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Writing gzipped buffer to wp-cache cache file.", 5); } fputs($fr, $gzdata); } } else { // no compression $wp_cache_meta['headers']['Vary'] = 'Vary: Cookie'; if ($fr) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Writing non-gzipped buffer to wp-cache cache file.", 5); } fputs($fr, $buffer); } } if ($fr2) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Writing non-gzipped buffer to supercache file.", 5); } fputs($fr2, $buffer . '<!-- super cache -->'); } if ($gz) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Writing gzipped buffer to supercache file.", 5); } fwrite($gz, $gzdata); } $buffer .= $log; } $new_cache = true; $added_cache = 0; if ($fr) { $supercacheonly = false; fclose($fr); if (!rename($tmp_wpcache_filename, $blog_cache_dir . $cache_filename)) { unlink($blog_cache_dir . $cache_filename); rename($tmp_wpcache_filename, $blog_cache_dir . $cache_filename); } if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Renamed temp wp-cache file to {$blog_cache_dir}{$cache_filename}", 5); } $added_cache = 1; } if ($fr2) { fclose($fr2); if (!@rename($tmp_cache_filename, $cache_fname)) { @unlink($cache_fname); @rename($tmp_cache_filename, $cache_fname); } if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Renamed temp supercache file to {$cache_fname}", 5); } $added_cache = 1; } if ($gz) { fclose($gz); if (!@rename($tmp_cache_filename . '.gz', $cache_fname . '.gz')) { @unlink($cache_fname . '.gz'); @rename($tmp_cache_filename . '.gz', $cache_fname . '.gz'); } if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { 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' => $_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() && isset($wp_cache_gzip_first) && 1 == $wp_cache_gzip_first && $wp_cache_gzip_encoding && $gzdata) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Writing gzip content headers. Sending buffer to browser", 5); } header('Content-Encoding: ' . $wp_cache_gzip_encoding); header('Vary: Accept-Encoding, Cookie'); header('Content-Length: ' . $gzsize); return $gzdata; } else { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Sending buffer to browser", 5); } return $buffer; } }
function wp_cache_get_ob(&$buffer) { global $cache_path, $cache_filename, $meta_file, $wp_start_time, $supercachedir; global $new_cache, $wp_cache_meta, $file_expired, $blog_id, $cache_compression; global $wp_cache_gzip_encoding, $super_cache_enabled, $cached_direct_pages; global $wp_cache_404, $gzsize, $supercacheonly, $wp_cache_gzip_first, $wp_cache_gmt_offset; global $blog_cache_dir; $new_cache = true; $wp_cache_meta = ''; /* Mode paranoic, check for closing tags * we avoid caching incomplete files */ if ($wp_cache_404) { $new_cache = false; $buffer .= "\n<!-- Page not cached by WP Super Cache. 404. -->\n"; } if (!preg_match('/(<\\/html>|<\\/rss>|<\\/feed>)/i', $buffer)) { $new_cache = false; if (false === strpos($_SERVER['REQUEST_URI'], 'robots.txt')) { $buffer .= "\n<!-- Page not cached by WP Super Cache. No closing HTML tag. Check your theme. -->\n"; } } if (!$new_cache) { return $buffer; } $duration = wp_cache_microtime_diff($wp_start_time, microtime()); $duration = sprintf("%0.3f", $duration); $buffer .= "\n<!-- Dynamic page generated in {$duration} seconds. -->\n"; if (!wp_cache_writers_entry()) { $buffer .= "\n<!-- Page not cached by WP Super Cache. Could not get mutex lock. -->\n"; return $buffer; } $mtime = @filemtime($blog_cache_dir . $cache_filename); /* Return if: the file didn't exist before but it does exist now (another connection created) OR the file was expired and its mtime is less than 5 seconds */ if (!(!$file_expired && $mtime || $mtime && $file_expired && time() - $mtime < 5)) { $dir = get_current_url_supercache_dir(); $supercachedir = $cache_path . 'supercache/' . preg_replace('/:.*$/', '', $_SERVER["HTTP_HOST"]); if (!empty($_GET) || is_feed() || $super_cache_enabled == true && is_dir(substr($supercachedir, 0, -1) . '.disabled')) { $super_cache_enabled = false; } $tmp_wpcache_filename = $cache_path . uniqid(mt_rand(), true) . '.tmp'; // Don't create wp-cache files for anon users $supercacheonly = false; if ($super_cache_enabled && wp_cache_get_cookies_values() == '') { $supercacheonly = true; } if (!$supercacheonly) { $fr = @fopen($tmp_wpcache_filename, 'w'); if (!$fr) { $buffer .= "<!-- File not cached! Super Cache Couldn't write to: " . str_replace(ABSPATH, '', $cache_path) . $cache_filename . " -->\n"; return $buffer; } } if ($super_cache_enabled) { $user_info = wp_cache_get_cookies_values(); $do_cache = apply_filters('do_createsupercache', $user_info); if ($user_info == '' || $do_cache === true) { if (@is_dir($dir) == false) { @wp_mkdir_p($dir); } $cache_fname = "{$dir}index.html"; $tmp_cache_filename = $dir . uniqid(mt_rand(), true) . '.tmp'; $fr2 = @fopen($tmp_cache_filename, 'w'); if (!$fr2) { $buffer .= "<!-- File not cached! Super Cache Couldn't write to: " . str_replace(ABSPATH, '', $tmp_cache_filename) . " -->\n"; @fclose($fr); @nlink($tmp_wpcache_filename); return $buffer; } if ($cache_compression) { $gz = @fopen($tmp_cache_filename . ".gz", 'w'); if (!$gz) { $buffer .= "<!-- File not cached! Super Cache Couldn't write to: " . str_replace(ABSPATH, '', $tmp_cache_filename) . ".gz -->\n"; @close($fr); @nlink($tmp_wpcache_filename); @close($fr2); @nlink($tmp_cache_filename); return $buffer; } } } } if (preg_match('/<!--mclude|<!--mfunc/', $buffer)) { //Dynamic content $store = preg_replace('|<!--mclude (.*?)-->(.*?)<!--/mclude-->|is', "<!--mclude-->\n<?php include_once('" . ABSPATH . "\$1'); ?>\n<!--/mclude-->", $buffer); $store = preg_replace('|<!--mfunc (.*?)-->(.*?)<!--/mfunc-->|is', "<!--mfunc-->\n<?php \$1 ;?>\n<!--/mfunc-->", $store); $store = apply_filters('wpsupercache_buffer', $store); $wp_cache_meta['dynamic'] = true; /* Clean function calls in tag */ $buffer = preg_replace('|<!--mclude (.*?)-->|is', '<!--mclude-->', $buffer); $buffer = preg_replace('|<!--mfunc (.*?)-->|is', '<!--mfunc-->', $buffer); if ($fr) { fputs($fr, $store); } if ($fr2) { fputs($fr2, $store . '<!-- super cache -->'); } if ($gz) { fputs($gz, gzencode($store . '<!-- super cache gz -->', 1, FORCE_GZIP)); } } else { $buffer = apply_filters('wpsupercache_buffer', $buffer); $buffer .= "<!-- Cached page generated by WP-Super-Cache on " . gmdate('Y-m-d H:i:s', time() + $wp_cache_gmt_offset * 3600) . " -->\n"; if ($gz || $wp_cache_gzip_encoding) { $gzdata = gzencode($buffer . "<!-- Compression = gzip -->", 3, FORCE_GZIP); $gzsize = strlen($gzdata); } if ($wp_cache_gzip_encoding) { $wp_cache_meta['headers']['Content-Encoding'] = 'Content-Encoding: ' . $wp_cache_gzip_encoding; $wp_cache_meta['headers']['Vary'] = 'Vary: Accept-Encoding, Cookie'; // Return uncompressed data & store compressed for later use if ($fr) { fputs($fr, $gzdata); } } else { // no compression $wp_cache_meta['headers']['Vary'] = 'Vary: Cookie'; if ($fr) { fputs($fr, $buffer); } } if ($fr2) { fputs($fr2, $buffer . '<!-- super cache -->'); } if ($gz) { fwrite($gz, $gzdata); } $buffer .= $log; } $new_cache = true; if ($fr) { $supercacheonly = false; fclose($fr); if (!rename($tmp_wpcache_filename, $blog_cache_dir . $cache_filename)) { unlink($blog_cache_dir . $cache_filename); rename($tmp_wpcache_filename, $blog_cache_dir . $cache_filename); } } if ($fr2) { fclose($fr2); if (!@rename($tmp_cache_filename, $cache_fname)) { @unlink($cache_fname); @rename($tmp_cache_filename, $cache_fname); } } if ($gz) { fclose($gz); if (!@rename($tmp_cache_filename . '.gz', $cache_fname . '.gz')) { @unlink($cache_fname . '.gz'); @rename($tmp_cache_filename . '.gz', $cache_fname . '.gz'); } } } wp_cache_writers_exit(); if (!headers_sent() && isset($wp_cache_gzip_first) && 1 == $wp_cache_gzip_first && $wp_cache_gzip_encoding && $gzdata) { header('Content-Encoding: ' . $wp_cache_gzip_encoding); header('Vary: Accept-Encoding, Cookie'); header('Content-Length: ' . $gzsize); return $gzdata; } else { return $buffer; } }
function wp_cache_serve_cache_file() { global $key, $blogcacheid, $wp_cache_request_uri, $file_prefix, $blog_cache_dir, $meta_file, $cache_file, $cache_filename, $wp_super_cache_debug, $meta_pathname, $wp_cache_gzip_encoding, $meta; global $wp_cache_object_cache, $cache_compression, $wp_cache_slash_check, $wp_supercache_304, $wp_cache_home_path, $wp_cache_no_cache_for_get; global $wp_cache_disable_utf8, $wp_cache_mfunc_enabled; extract(wp_super_cache_init()); if (wp_cache_user_agent_is_rejected()) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("No wp-cache file served as user agent rejected.", 5); } return false; } if ($wp_cache_no_cache_for_get && false == empty($_GET)) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Non empty GET request. Caching disabled on settings page. " . print_r($_GET, 1), 1); } return false; } if ($wp_cache_object_cache && wp_cache_get_cookies_values() == '') { if (!empty($_GET)) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Non empty GET request. Not serving request from object cache. " . print_r($_GET, 1), 1); } return false; } $oc_key = get_oc_key(); $meta_filename = $oc_key . ".meta"; if (gzip_accepted()) { $oc_key .= ".gz"; $meta_filename .= ".gz"; } $cache = wp_cache_get($oc_key, 'supercache'); $meta = unserialize(wp_cache_get($meta_filename, 'supercache')); if (is_array($meta) == false) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Meta array from object cache corrupt. Ignoring cache.", 1); } return true; } } elseif (file_exists($cache_file)) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("wp-cache file exists: {$cache_file}", 5); } if (!($meta = unserialize(@file_get_contents($meta_pathname)))) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("couldn't load wp-cache meta file", 5); } return true; } if (is_array($meta) == false) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("meta array corrupt, deleting {$meta_pathname} and {$cache_file}", 1); } @unlink($meta_pathname); @unlink($cache_file); return true; } } else { // last chance, check if a supercache file exists. Just in case .htaccess rules don't work on this host $filename = supercache_filename(); $file = get_current_url_supercache_dir() . $filename; if (false == file_exists($file)) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("No Super Cache file found for current URL: {$file}"); } return false; } elseif (false == empty($_GET)) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("GET array not empty. Cannot serve a supercache file. " . print_r($_GET, 1)); } return false; } elseif (wp_cache_get_cookies_values() != '') { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Cookies found. Cannot serve a supercache file. " . wp_cache_get_cookies_values()); } return false; } if (isset($wp_cache_mfunc_enabled) == false) { $wp_cache_mfunc_enabled = 0; } if (false == isset($wp_cache_home_path)) { $wp_cache_home_path = '/'; } // make sure ending slashes are ok if ($wp_cache_request_uri == $wp_cache_home_path || $wp_cache_slash_check && substr($wp_cache_request_uri, -1) == '/' || $wp_cache_slash_check == 0 && substr($wp_cache_request_uri, -1) != '/') { if ($wp_cache_mfunc_enabled == 0) { // get data from file if ($wp_cache_gzip_encoding) { if (file_exists($file . '.gz')) { $cachefiledata = file_get_contents($file . '.gz'); if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Fetched gzip static page data from supercache file using PHP. File: {$file}.gz"); } } else { $cachefiledata = gzencode(file_get_contents($file), 6, FORCE_GZIP); if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Fetched static page data from supercache file using PHP and gzipped it. File: {$file}"); } } } else { $cachefiledata = file_get_contents($file); if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Fetched static page data from supercache file using PHP. File: {$file}"); } } } else { // get dynamic data from filtered file $cachefiledata = do_cacheaction('wpsc_cachedata', file_get_contents($file)); if ($wp_cache_gzip_encoding) { $cachefiledata = gzencode($cachefiledata, 6, FORCE_GZIP); if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Fetched dynamic page data from supercache file using PHP and gzipped it. File: {$file}"); } } else { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Fetched dynamic page data from supercache file using PHP. File: {$file}"); } } } if (isset($wp_cache_disable_utf8) == false || $wp_cache_disable_utf8 == 0) { header("Content-type: text/html; charset=UTF-8"); } header("Vary: Accept-Encoding, Cookie"); header("Cache-Control: max-age=3, must-revalidate"); header("WP-Super-Cache: Served supercache file from PHP"); $size = function_exists('mb_strlen') ? mb_strlen($cachefiledata, '8bit') : strlen($cachefiledata); if ($wp_cache_gzip_encoding) { header('Content-Encoding: ' . $wp_cache_gzip_encoding); header('Content-Length: ' . $size); } elseif ($wp_supercache_304) { header('Content-Length: ' . $size); } // don't try to match modified dates if using dynamic code. if ($wp_cache_mfunc_enabled == 0 && $wp_supercache_304) { if (function_exists('apache_request_headers')) { $request = apache_request_headers(); $remote_mod_time = $request['If-Modified-Since']; } else { if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { $remote_mod_time = $_SERVER['HTTP_IF_MODIFIED_SINCE']; } else { $remote_mod_time = 0; } } $local_mod_time = gmdate("D, d M Y H:i:s", filemtime($file)) . ' GMT'; if ($remote_mod_time != 0 && $remote_mod_time == $local_mod_time) { header("HTTP/1.0 304 Not Modified"); exit; } header('Last-Modified: ' . $local_mod_time); } echo $cachefiledata; exit; } else { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("No wp-cache file exists. Must generate a new one."); } return false; } } $cache_file = do_cacheaction('wp_cache_served_cache_file', $cache_file); // Sometimes the gzip headers are lost. Make sure html returned isn't compressed! if ($cache_compression && $wp_cache_gzip_encoding && !in_array('Content-Encoding: ' . $wp_cache_gzip_encoding, $meta['headers'])) { $ungzip = true; if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("GZIP headers not found. Force uncompressed output.", 1); } } else { $ungzip = false; } foreach ($meta['headers'] as $t => $header) { // godaddy fix, via http://blog.gneu.org/2008/05/wp-supercache-on-godaddy/ and http://www.littleredrails.com/blog/2007/09/08/using-wp-cache-on-godaddy-500-error/ if (strpos($header, 'Last-Modified:') === false) { header($header); } } header('WP-Super-Cache: Served legacy cache file'); if ($wp_cache_object_cache) { if ($cache) { if ($ungzip) { // attempt to uncompress the cached file just in case it's gzipped $uncompressed = gzuncompress($cache); if ($uncompressed) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Uncompressed gzipped cache file from object cache", 1); } $cache = $uncompressed; unset($uncompressed); } } if (isset($meta['dynamic']) && $meta['dynamic']) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Serving wp-cache dynamic file from object cache", 5); } echo do_cacheaction('wpsc_cachedata', $cache); } else { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Serving wp-cache static file from object cache", 5); } echo $cache; } if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("exit request", 5); } die; } } else { if (isset($meta['dynamic'])) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Serving wp-cache dynamic file", 5); } if ($ungzip) { // attempt to uncompress the cached file just in case it's gzipped $cache = file_get_contents($cache_file); $uncompressed = @gzuncompress($cache); if ($uncompressed) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Uncompressed gzipped cache file from wp-cache", 1); } unset($cache); echo do_cacheaction('wpsc_cachedata', $uncompressed); } else { echo do_cacheaction('wpsc_cachedata', $cache); } } else { echo do_cacheaction('wpsc_cachedata', file_get_contents($cache_file)); } } else { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Serving wp-cache static file", 5); } if ($ungzip) { $cache = file_get_contents($cache_file); $uncompressed = gzuncompress($cache); if ($uncompressed) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Uncompressed gzipped cache file from wp-cache", 1); } echo $uncompressed; } else { echo $cache; } } else { readfile($cache_file); } } if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("exit request", 5); } die; } }
function wp_cache_get_ob(&$buffer) { global $wpsc_settings; global $cache_enabled, $cache_path, $cache_filename, $meta_file, $wp_start_time, $supercachedir; global $new_cache, $wp_cache_meta, $file_expired, $blog_id, $cache_compression; global $wp_cache_gzip_encoding, $super_cache_enabled, $cached_direct_pages; global $wp_cache_404, $gzsize, $supercacheonly; global $blog_cache_dir, $wp_cache_request_uri, $wp_supercache_cache_list; global $wp_cache_not_logged_in, $wp_cache_object_cache, $cache_max_time; global $wp_cache_is_home, $wp_cache_front_page_checks; $new_cache = true; $wp_cache_meta = ''; /* 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); $buffer .= "\n<!-- Page not cached by WP Super Cache. Blank Page. Check output buffer usage by plugins. -->\n"; } } if ($wp_cache_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); $buffer .= "\n<!-- Page not cached by WP Super Cache. 404. -->\n"; } } if (!preg_match('/(<\\/html>|<\\/rss>|<\\/feed>|<\\/urlset)/i', $buffer)) { $new_cache = false; if (false === strpos($_SERVER['REQUEST_URI'], 'robots.txt')) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("No closing html tag. Not caching.", 2); $buffer .= "\n<!-- Page not cached by WP Super Cache. No closing HTML tag. Check your theme. -->\n"; } } else { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("robots.txt detected. Not caching.", 2); } } } if (!$new_cache) { return $buffer; } $duration = wp_cache_microtime_diff($wp_start_time, microtime()); $duration = sprintf("%0.3f", $duration); $buffer .= "\n<!-- Dynamic page generated in {$duration} seconds. -->\n"; if (!wp_cache_writers_entry()) { $buffer .= "\n<!-- Page not cached by WP Super Cache. Could not get mutex lock. -->\n"; if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Could not get mutex lock. Not caching.", 1); } return $buffer; } if ($wp_cache_not_logged_in && is_feed()) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Feed detected. Writing legacy 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) || is_feed() || $super_cache_enabled == true && is_dir(substr($supercachedir, 0, -1) . '.disabled')) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { 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'; $supercacheonly = false; if ($super_cache_enabled) { if (wp_cache_get_cookies_values() == '') { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Anonymous user detected. Only creating Supercache file.", 3); } $supercacheonly = true; } } $cache_error = ''; if ($wp_cache_not_logged_in && wp_cache_get_cookies_values() != '') { $super_cache_enabled = false; $cache_enabled = false; $cache_error = 'Not caching requests by known users. (See Advanced Settings page)'; if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug('Not caching for known user.', 5); } } if ($wp_cache_object_cache) { // half on mode when using the object cache if (wp_cache_get_cookies_values() != '') { $cache_enabled = false; $cache_error = 'Known User and using object. Only anonymous users cached.'; } $super_cache_enabled = false; $supercacheonly = false; wp_cache_init(); // PHP5 destroys objects during shutdown } if (!$cache_enabled) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug('', 5); } wp_cache_writers_exit(); return $buffer . "\n<!-- Page not cached by WP Super Cache. Check your settings page. {$cache_error} -->"; } if (@is_dir($dir) == false) { @wp_mkdir_p($dir); } $fr = $fr2 = $gz = false; // Open wp-cache cache file if (!$supercacheonly) { if (false == $wp_cache_object_cache) { $fr = @fopen($tmp_wpcache_filename, 'w'); if (!$fr) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Error. Supercache could not write to " . str_replace(ABSPATH, '', $cache_path) . $cache_filename, 1); } $buffer .= "<!-- File not cached! Super Cache Couldn't write to: " . str_replace(ABSPATH, '', $cache_path) . $cache_filename . " -->\n"; wp_cache_writers_exit(); return $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) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Error. Supercache could not write to " . str_replace(ABSPATH, '', $tmp_cache_filename), 1); } $buffer .= "<!-- File not cached! Super Cache Couldn't write to: " . str_replace(ABSPATH, '', $tmp_cache_filename) . " -->\n"; @fclose($fr); @unlink($tmp_wpcache_filename); wp_cache_writers_exit(); return $buffer; } elseif ($cache_compression) { $gz = @fopen($tmp_cache_filename . ".gz", 'w'); if (!$gz) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Error. Supercache could not write to " . str_replace(ABSPATH, '', $tmp_cache_filename) . ".gz", 1); } $buffer .= "<!-- File not cached! Super Cache Couldn't write to: " . str_replace(ABSPATH, '', $tmp_cache_filename) . ".gz -->\n"; @fclose($fr); @unlink($tmp_wpcache_filename); @fclose($fr2); @unlink($tmp_cache_filename); wp_cache_writers_exit(); return $buffer; } } } } $added_cache = 0; $oc_key = get_oc_key(); if (preg_match('/<!--mclude|<!--mfunc|<!--dynamic-cached-content-->/', $buffer)) { //Dynamic content if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Dynamic content found in buffer.", 4); } $store = preg_replace('|<!--mclude (.*?)-->(.*?)<!--/mclude-->|is', "<!--mclude-->\n<?php include_once('" . ABSPATH . "\$1'); ?>\n<!--/mclude-->", $buffer); $store = preg_replace('|<!--mfunc (.*?)-->(.*?)<!--/mfunc-->|is', "<!--mfunc-->\n<?php \$1 ;?>\n<!--/mfunc-->", $store); $store = preg_replace('|<!--dynamic-cached-content-->(.*?)<!--(.*?)--><!--/dynamic-cached-content-->|is', "<!--dynamic-cached-content-->\n<?php\$2?>\n<!--/dynamic-cached-content-->", $store); $wp_cache_meta['dynamic'] = true; /* Clean function calls in tag */ $buffer = preg_replace('|<!--mclude (.*?)-->|is', '<!--mclude-->', $buffer); $buffer = preg_replace('|<!--mfunc (.*?)-->|is', '<!--mfunc-->', $buffer); $buffer = preg_replace('|<!--dynamic-cached-content-->(.*?)<!--(.*?)--><!--/dynamic-cached-content-->|is', "<!--dynamic-cached-content-->\$1<!--/dynamic-cached-content-->", $buffer); $store = apply_filters('wpsupercache_buffer', $store); // Append WP Super Cache or Live page comment tag wp_cache_append_tag($buffer); wp_cache_append_tag($store); 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) { $buffer .= '<!-- Super Cache dynamic page detected but $wp_super_cache_late_init not set. See the readme.txt for further details. -->'; } if (false == $wp_cache_object_cache) { if ($fr) { // legacy caching fputs($fr, $store); } elseif (isset($fr2)) { // supercache active $php_fname = "{$dir}" . supercache_filename() . ".php"; $tmp_php_filename = $dir . uniqid(mt_rand(), true) . '.tmp'; $php_fd = @fopen($tmp_php_filename, 'w'); if (!$php_fd) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Error. Supercache could not write to " . str_replace(ABSPATH, '', $tmp_php_filename), 1); } $buffer .= "<!-- File not cached! Super Cache couldn't write to: " . str_replace(ABSPATH, '', $tmp_php_filename) . " -->\n"; @fclose($php_fd); @unlink($tmp_php_filename); wp_cache_writers_exit(); return $buffer; } fputs($php_fd, $store); } } else { wp_cache_set($oc_key, $store, 'supercache', $cache_max_time); } if ($cache_compression && $wp_cache_gzip_encoding) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Gzipping dynamic buffer.", 5); } $gzdata = gzencode($buffer . "<!-- Compression = gzip -->", 6, FORCE_GZIP); $gzsize = function_exists('mb_strlen') ? mb_strlen($gzdata, '8bit') : strlen($gzdata); } } else { $buffer = apply_filters('wpsupercache_buffer', $buffer); // Append WP Super Cache or Live page comment tag wp_cache_append_tag($buffer); if ($gz || $wp_cache_gzip_encoding) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Gzipping buffer.", 5); } $gzdata = gzencode($buffer . "<!-- Compression = gzip -->", 6, FORCE_GZIP); $gzsize = function_exists('mb_strlen') ? mb_strlen($gzdata, '8bit') : strlen($gzdata); } if ($wp_cache_gzip_encoding) { $wp_cache_meta['headers']['Content-Encoding'] = 'Content-Encoding: ' . $wp_cache_gzip_encoding; $wp_cache_meta['headers']['Vary'] = 'Vary: Accept-Encoding, Cookie'; // Return uncompressed data & store compressed for later use if (false == $wp_cache_object_cache) { if ($fr) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Writing gzipped buffer to wp-cache cache file.", 5); } fputs($fr, $gzdata); } } elseif ($cache_enabled) { wp_cache_set($oc_key . ".gz", $gzdata, 'supercache', $cache_max_time); $added_cache = 1; } } else { // no compression $wp_cache_meta['headers']['Vary'] = 'Vary: Cookie'; if (false == $wp_cache_object_cache) { if ($fr) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Writing non-gzipped buffer to wp-cache cache file.", 5); } fputs($fr, $buffer); } } elseif ($cache_enabled) { wp_cache_set($oc_key, $buffer, 'supercache', $cache_max_time); $added_cache = 1; } } if (false == $wp_cache_object_cache) { if ($fr2) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Writing non-gzipped buffer to supercache file.", 5); } fputs($fr2, $buffer . '<!-- super cache -->'); } if ($gz) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Writing gzipped buffer to supercache file.", 5); } fwrite($gz, $gzdata); } } } $new_cache = true; if (false == $wp_cache_object_cache) { if ($fr) { $supercacheonly = false; fclose($fr); if (filesize($tmp_wpcache_filename) == 0) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Warning! The file {$tmp_wpcache_filename} was empty. Did not rename to {$blog_cache_dir}{$cache_filename}", 5); } @unlink($tmp_wpcache_filename); } else { if (!rename($tmp_wpcache_filename, $blog_cache_dir . $cache_filename)) { unlink($blog_cache_dir . $cache_filename); rename($tmp_wpcache_filename, $blog_cache_dir . $cache_filename); } if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Renamed temp wp-cache file to {$blog_cache_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(); if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Warning! Not writing another page to front page cache.", 1); } return $buffer; } elseif (filesize($tmp_cache_filename) == 0) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { 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); } if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Renamed temp supercache file to {$cache_fname}", 5); } $added_cache = 1; } } if ($php_fd) { fclose($php_fd); if ($php_fname == $supercachedir . $home_url['path'] . supercache_filename() . '.php' && !$wp_cache_is_home) { wp_cache_writers_exit(); if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Warning! Not writing another page to front page cache.", 1); } return $buffer; } elseif (filesize($tmp_php_filename) == 0) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Warning! The file {$tmp_php_filename} was empty. Did not rename to {$php_fname}", 5); } @unlink($tmp_php_filename); } else { if (!@rename($tmp_php_filename, $php_fname)) { @unlink($php_fname); @rename($tmp_php_filename, $php_fname); } if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Renamed temp supercache file to {$php_fname}", 5); } $added_cache = 1; } } if ($gz) { fclose($gz); if (filesize($tmp_cache_filename . '.gz') == 0) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { 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'); } if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { 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' => $_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) { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Writing gzip content headers. Sending buffer to browser", 5); } header('Content-Encoding: ' . $wp_cache_gzip_encoding); header('Vary: Accept-Encoding, Cookie'); header('Content-Length: ' . $gzsize); return $gzdata; } else { if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) { wp_cache_debug("Sending buffer to browser", 5); } return $buffer; } }
<?php if (!@(include ABSPATH . 'wp-content/wp-cache-config.php')) { return; } $mutex_filename = 'wp_cache_mutex.lock'; $new_cache = false; // Don't change variables behind this point if (!$cache_enabled || $_SERVER["REQUEST_METHOD"] == 'POST') { return; } $file_expired = false; $cache_filename = ''; $meta_file = ''; $key = md5(preg_replace('/#.*$/', '', $_SERVER['REQUEST_URI']) . wp_cache_get_cookies_values()); $cache_filename = $file_prefix . $key . '.html'; $meta_file = $file_prefix . $key . '.meta'; $cache_file = $cache_path . $cache_filename; $meta_pathname = $cache_path . $meta_file; $wp_start_time = microtime(); if ($mtime = @filemtime($meta_pathname)) { if ($mtime + $cache_max_time > time()) { $meta = new CacheMeta(); if (!($meta = unserialize(@file_get_contents($meta_pathname)))) { return; } foreach ($meta->headers as $header) { header($header); } $log = "<!-- Cached page served by WP-Cache -->\n"; if (!($content_size = @filesize($cache_file)) > 0 || $mtime < @filemtime($cache_file)) {
function wp_cache_serve_cache_file() { global $key, $blogcacheid, $wp_cache_request_uri, $file_prefix, $blog_cache_dir, $meta_file, $cache_file, $cache_filename, $wp_super_cache_debug, $meta_pathname, $wp_cache_gzip_encoding, $meta; global $wp_cache_object_cache, $cache_compression, $wp_cache_slash_check, $wp_supercache_304; extract(wp_super_cache_init()); if (wp_cache_user_agent_is_rejected()) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("No wp-cache file served as user agent rejected.", 5); } return false; } if ($wp_cache_object_cache && wp_cache_get_cookies_values() == '') { if (!empty($_GET)) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Non empty GET request. Not serving request from object cache", 1); } return false; } $oc_key = get_oc_key(); $meta_filename = $oc_key . ".meta"; if (gzip_accepted()) { $oc_key .= ".gz"; $meta_filename .= ".gz"; } $cache = wp_cache_get($oc_key, 'supercache'); $meta = unserialize(wp_cache_get($meta_filename, 'supercache')); if (is_array($meta) == false) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Meta array from object cache corrupt. Ignoring cache.", 1); } return true; } } elseif (file_exists($cache_file)) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("wp-cache file exists: {$cache_file}", 5); } if (!($meta = unserialize(@file_get_contents($meta_pathname)))) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("couldn't load wp-cache meta file", 5); } return true; } if (is_array($meta) == false) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("meta array corrupt, deleting {$meta_pathname} and {$cache_file}", 1); } @unlink($meta_pathname); @unlink($cache_file); return true; } } else { // last chance, check if a supercache file exists. Just in case .htaccess rules don't work on this host $file = get_current_url_supercache_dir() . "index.html"; $phpfile = get_current_url_supercache_dir() . "index.html.php"; $serving_supercache = false; if (file_exists($file)) { $serving_supercache = 'html'; } elseif (file_exists($phpfile)) { $serving_supercache = 'php'; } if (($wp_cache_request_uri == '/' || $wp_cache_slash_check && substr($wp_cache_request_uri, -1) == '/' || $wp_cache_slash_check == 0 && substr($wp_cache_request_uri, -1) != '/') && (wp_cache_get_cookies_values() == '' && empty($_GET) && $serving_supercache)) { header("Content-type: text/html; charset=UTF-8"); // UTF-8 hard coded is bad but we don't know what it is this early in the process header("Vary: Accept-Encoding, Cookie"); header("Cache-Control: max-age=300, must-revalidate"); header("WP-Super-Cache: Served supercache file from PHP"); if (file_exists($file . '.gz') && $wp_cache_gzip_encoding) { $file = $file . '.gz'; header('Content-Encoding: ' . $wp_cache_gzip_encoding); header('Content-Length: ' . filesize($file)); } elseif ($serving_supercache == 'html' && $wp_supercache_304) { header('Content-Length: ' . filesize($file)); } if ($serving_supercache == 'html' && $wp_supercache_304) { if (function_exists('apache_request_headers')) { $request = apache_request_headers(); $remote_mod_time = $request['If-Modified-Since']; } else { $remote_mod_time = $_SERVER['HTTP_IF_MODIFIED_SINCE']; } $local_mod_time = gmdate("D, d M Y H:i:s", filemtime($file)) . ' GMT'; if ($remote_mod_time == $local_mod_time) { header("HTTP/1.0 304 Not Modified"); exit; } header('Last-Modified: ' . $local_mod_time); } if ($serving_supercache == 'html') { readfile($file); if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Served page from supercache file using PHP.", 5); } exit; } elseif ($serving_supercache == 'php') { $cachefiledata = file_get_contents($phpfile); if ($cache_compression and $wp_cache_gzip_encoding) { ob_start("ob_gzhandler"); eval('?>' . $cachefiledata . '<?php '); echo "\n<!-- Compression = gzip -->\n"; ob_end_flush(); if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Served compressed dynamic page from supercache file using PHP. File: {$file}", 5); } } else { eval('?>' . $cachefiledata . '<?php '); if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Served dynamic page from supercache file using PHP. File: {$file}", 5); } } exit; } } else { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("No wp-cache file exists. Must generate a new one.", 5); } return false; } } $cache_file = do_cacheaction('wp_cache_served_cache_file', $cache_file); // Sometimes the gzip headers are lost. Make sure html returned isn't compressed! if ($cache_compression && $wp_cache_gzip_encoding && !in_array('Content-Encoding: ' . $wp_cache_gzip_encoding, $meta['headers'])) { $ungzip = true; if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("GZIP headers not found. Force uncompressed output.", 1); } } else { $ungzip = false; } foreach ($meta['headers'] as $t => $header) { // godaddy fix, via http://blog.gneu.org/2008/05/wp-supercache-on-godaddy/ and http://www.littleredrails.com/blog/2007/09/08/using-wp-cache-on-godaddy-500-error/ if (strpos($header, 'Last-Modified:') === false) { header($header); } } header('WP-Super-Cache: Served legacy cache file'); if ($wp_cache_object_cache) { if ($cache) { if ($ungzip) { $uncompressed = gzuncompress($cache); if ($uncompressed) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Uncompressed gzipped cache file from object cache", 1); } $cache = $uncompressed; unset($uncompressed); } } if (isset($meta['dynamic']) && $meta['dynamic']) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Serving wp-cache dynamic file from object cache", 5); } eval('?>' . $cache . '<?php '); } else { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Serving wp-cache static file from object cache", 5); } echo $cache; } if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("exit request", 5); } die; } } else { if ($meta['dynamic']) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Serving wp-cache dynamic file", 5); } if ($ungzip) { $cache = file_get_contents($cache_file); $uncompressed = gzuncompress($cache); if ($uncompressed) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Uncompressed gzipped cache file from wp-cache", 1); } unset($cache); eval('?>' . $uncompressed . '<?php '); } else { eval('?>' . $cache . '<?php '); } } else { include $cache_file; } } else { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Serving wp-cache static file", 5); } if ($wp_supercache_304) { if (function_exists('apache_request_headers')) { $request = apache_request_headers(); $remote_mod_time = $request['If-Modified-Since']; } else { $remote_mod_time = $_SERVER['HTTP_IF_MODIFIED_SINCE']; } $local_mod_time = gmdate("D, d M Y H:i:s", filemtime($cache_file)) . ' GMT'; if ($remote_mod_time == $local_mod_time) { header("HTTP/1.0 304 Not Modified"); exit; } header('Last-Modified: ' . $local_mod_time); } if ($ungzip) { $cache = file_get_contents($cache_file); $uncompressed = gzuncompress($cache); if ($uncompressed) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Uncompressed gzipped cache file from wp-cache", 1); } echo $uncompressed; } else { echo $cache; } } else { readfile($cache_file); } } if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("exit request", 5); } die; } }
function gzip_accepted() { if (ini_get('zlib.output_compression')) { // don't compress WP-Cache data files when PHP is already doing it return false; } if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') === false) { return false; } return 'gzip'; } if ($cache_compression) { $wp_cache_gzip_encoding = gzip_accepted(); } add_cacheaction('wp_cache_key', 'wp_cache_check_mobile'); $key = $blogcacheid . md5(do_cacheaction('wp_cache_key', $_SERVER['HTTP_HOST'] . preg_replace('/#.*$/', '', str_replace('/index.php', '/', $_SERVER['REQUEST_URI'])) . $wp_cache_gzip_encoding . wp_cache_get_cookies_values())); if (false == @is_dir($blog_cache_dir)) { @mkdir($cache_path . "blogs"); @mkdir($blog_cache_dir); } if (false == @is_dir($blog_cache_dir . 'meta')) { @mkdir($blog_cache_dir . 'meta'); } $cache_filename = $file_prefix . $key . '.html'; $meta_file = $file_prefix . $key . '.meta'; $cache_file = realpath($blog_cache_dir . $cache_filename); $meta_pathname = realpath($blog_cache_dir . 'meta/' . $meta_file); $wp_start_time = microtime(); if (file_exists($cache_file) && ($mtime = @filemtime($meta_pathname))) { if ($mtime + $cache_max_time > time()) { if (!($meta = unserialize(@file_get_contents($meta_pathname)))) {
function wp_cache_get_ob(&$buffer) { global $cache_enabled, $cache_path, $cache_filename, $meta_file, $wp_start_time, $supercachedir; global $new_cache, $wp_cache_meta, $file_expired, $blog_id, $cache_compression; global $wp_cache_gzip_encoding, $super_cache_enabled, $cached_direct_pages; global $wp_cache_404, $gzsize, $supercacheonly; global $blog_cache_dir, $wp_cache_request_uri, $wp_supercache_cache_list; global $wp_cache_not_logged_in, $wp_cache_object_cache, $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 = ''; /* 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 ($wp_cache_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 (false === strpos($_SERVER['REQUEST_URI'], 'robots.txt')) { 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."); } } else { wp_cache_debug("robots.txt detected. Not caching.", 2); } } 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 && is_feed()) { wp_cache_debug("Feed detected. Writing legacy 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) || 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'; $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 ($wp_cache_not_logged_in && wp_cache_get_cookies_values() != '') { $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 ($wp_cache_object_cache) { // half on mode when using the object cache if (wp_cache_get_cookies_values() != '') { $cache_enabled = false; $cache_error = 'Known User and using object. Only anonymous users cached.'; } $super_cache_enabled = false; $supercacheonly = false; wp_cache_init(); // PHP5 destroys objects during shutdown } 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); } $fr = $fr2 = $gz = false; // Open wp-cache cache file if (false == $wp_cache_object_cache) { 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 ((!isset($wp_cache_mfunc_enabled) || $wp_cache_mfunc_enabled == 0) && $cache_compression) { // 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) { // legacy caching wp_cache_debug("Writing dynamic buffer to legacy file."); wp_cache_add_to_buffer($buffer, "Dynamic Legacy Super Cache"); fputs($fr, $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); } elseif (true == $wp_cache_object_cache) { wp_cache_set($oc_key, $buffer, 'supercache', $cache_max_time); } $wp_cache_meta['dynamic'] = true; if (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 ($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; $wp_cache_meta['headers']['Vary'] = 'Vary: Accept-Encoding, Cookie'; // Return uncompressed data & store compressed for later use if ($fr) { wp_cache_debug("Writing gzipped buffer to wp-cache cache file.", 5); fputs($fr, $gzdata); } elseif ($cache_enabled && $wp_cache_object_cache) { wp_cache_set($oc_key . ".gz", $gzdata, 'supercache', $cache_max_time); $added_cache = 1; } } else { // no compression $wp_cache_meta['headers']['Vary'] = 'Vary: Cookie'; if ($cache_enabled && $wp_cache_object_cache) { wp_cache_set($oc_key, $buffer, 'supercache', $cache_max_time); $added_cache = 1; } elseif ($fr) { wp_cache_debug("Writing non-gzipped buffer to wp-cache cache file."); fputs($fr, $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 (false == $wp_cache_object_cache) { 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 {$blog_cache_dir}{$cache_filename}", 5); @unlink($tmp_wpcache_filename); } else { if (!@rename($tmp_wpcache_filename, $blog_cache_dir . $cache_filename)) { if (false == is_dir($blog_cache_dir)) { @wp_mkdir_p($blog_cache_dir); } @unlink($blog_cache_dir . $cache_filename); @rename($tmp_wpcache_filename, $blog_cache_dir . $cache_filename); } wp_cache_debug("Renamed temp wp-cache file to {$blog_cache_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); header('Vary: Accept-Encoding, Cookie'); header('Content-Length: ' . $gzsize); return $gzdata; } else { wp_cache_debug("Sending buffer to browser", 5); return $buffer; } }
function wp_cache_serve_cache_file() { global $key, $blogcacheid, $wp_cache_request_uri, $file_prefix, $blog_cache_dir, $meta_file, $cache_file, $cache_filename, $wp_super_cache_debug, $meta_pathname, $wp_cache_gzip_encoding, $meta; global $wp_cache_object_cache, $cache_compression, $wp_cache_slash_check; extract(wp_super_cache_init()); if (wp_cache_user_agent_is_rejected()) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("No wp-cache file served as user agent rejected.", 5); } return false; } if ($wp_cache_object_cache && wp_cache_get_cookies_values() == '') { if (!empty($_GET)) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Non empty GET request. Not serving request from object cache", 1); } return false; } $oc_key = get_oc_key(); $meta_filename = $oc_key . ".meta"; if (gzip_accepted()) { $oc_key .= ".gz"; $meta_filename .= ".gz"; } $cache = wp_cache_get($oc_key, 'supercache'); $meta = unserialize(wp_cache_get($meta_filename, 'supercache')); if (is_array($meta) == false) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Meta array from object cache corrupt. Ignoring cache.", 1); } return true; } } elseif (file_exists($cache_file)) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("wp-cache file exists: {$cache_file}", 5); } if (!($meta = unserialize(@file_get_contents($meta_pathname)))) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("couldn't load wp-cache meta file", 5); } return true; } if (is_array($meta) == false) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("meta array corrupt, deleting {$meta_pathname} and {$cache_file}", 1); } @unlink($meta_pathname); @unlink($cache_file); return true; } } else { // last chance, check if a supercache file exists. Just in case .htaccess rules don't work on this host $file = get_current_url_supercache_dir() . "index.html"; if (($wp_cache_request_uri == '/' || $wp_cache_slash_check && substr($wp_cache_request_uri, -1) == '/' || $wp_cache_slash_check == 0 && substr($wp_cache_request_uri, -1) != '/') && (wp_cache_get_cookies_values() == '' && empty($_GET) && file_exists($file))) { header("Content-type: text/html; charset=UTF-8"); // UTF-8 hard coded is bad but we don't know what it is this early in the process header("Vary: Accept-Encoding, Cookie"); header("Cache-Control: max-age=300, must-revalidate"); header("WP-Cache: Served supercache file from PHP"); readfile($file); if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Served page from supercache file. Mod rewrite rules may be broken or missing.", 5); } die; } else { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("No wp-cache file exists. Must generate a new one.", 5); } return false; } } $cache_file = do_cacheaction('wp_cache_served_cache_file', $cache_file); // Sometimes the gzip headers are lost. Make sure html returned isn't compressed! if ($cache_compression && $wp_cache_gzip_encoding && !in_array('Content-Encoding: ' . $wp_cache_gzip_encoding, $meta['headers'])) { $ungzip = true; if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("GZIP headers not found. Force uncompressed output.", 1); } } else { $ungzip = false; } foreach ($meta['headers'] as $t => $header) { // godaddy fix, via http://blog.gneu.org/2008/05/wp-supercache-on-godaddy/ and http://www.littleredrails.com/blog/2007/09/08/using-wp-cache-on-godaddy-500-error/ if (strpos($header, 'Last-Modified:') === false) { header($header); } } header('WP-Super-Cache: WP-Cache'); if ($wp_cache_object_cache) { if ($cache) { if ($ungzip) { $uncompressed = gzuncompress($cache); if ($uncompressed) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Uncompressed gzipped cache file from object cache", 1); } $cache = $uncompressed; unset($uncompressed); } } if ($meta['dynamic']) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Serving wp-cache dynamic file from object cache", 5); } eval('?>' . $cache . '<?php '); } else { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Serving wp-cache static file from object cache", 5); } echo $cache; } if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("exit request", 5); } die; } } else { if ($meta['dynamic']) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Serving wp-cache dynamic file", 5); } if ($ungzip) { $cache = file_get_contents($cache_file); $uncompressed = gzuncompress($cache); if ($uncompressed) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Uncompressed gzipped cache file from wp-cache", 1); } unset($cache); eval('?>' . $uncompressed . '<?php '); } else { eval('?>' . $cache . '<?php '); } } else { include $cache_file; } } else { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Serving wp-cache static file", 5); } if ($ungzip) { $cache = file_get_contents($cache_file); $uncompressed = gzuncompress($cache); if ($uncompressed) { if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("Uncompressed gzipped cache file from wp-cache", 1); } echo $uncompressed; } else { echo $cache; } } else { readfile($cache_file); } } if (isset($wp_super_cache_debug) && $wp_super_cache_debug) { wp_cache_debug("exit request", 5); } die; } }
function wp_cache_ob_callback($buffer) { global $cache_path, $cache_filename, $meta_file, $wp_start_time, $supercachedir; global $new_cache, $wp_cache_meta_object, $file_expired, $blog_id, $cache_compression; global $wp_cache_gzip_encoding, $super_cache_enabled, $cached_direct_pages; global $wp_cache_404, $gzsize; $new_cache = true; /* Mode paranoic, check for closing tags * we avoid caching incomplete files */ if ($wp_cache_404) { $new_cache = false; $buffer .= "\n<!-- Page not cached by WP Super Cache. 404. -->\n"; } if (!preg_match('/(<\\/html>|<\\/rss>|<\\/feed>)/i', $buffer)) { $new_cache = false; $buffer .= "\n<!-- Page not cached by WP Super Cache. No closing HTML tag. Check your theme. -->\n"; } if (!$new_cache) { return $buffer; } $duration = wp_cache_microtime_diff($wp_start_time, microtime()); $duration = sprintf("%0.3f", $duration); $buffer .= "\n<!-- Dynamic Page Served (once) in {$duration} seconds -->\n"; if (!wp_cache_writers_entry()) { $buffer .= "\n<!-- Page not cached by WP Super Cache. Could not get mutex lock. -->\n"; return $buffer; } $mtime = @filemtime($cache_path . $cache_filename); /* Return if: the file didn't exist before but it does exist now (another connection created) OR the file was expired and its mtime is less than 5 seconds */ if (!(!$file_expired && $mtime || $mtime && $file_expired && time() - $mtime < 5)) { $dir = get_current_url_supercache_dir(); $supercachedir = $cache_path . 'supercache/' . preg_replace('/:.*$/', '', $_SERVER["HTTP_HOST"]); if (!empty($_GET) || is_feed() || $super_cache_enabled == true && is_dir(substr($supercachedir, 0, -1) . '.disabled')) { $super_cache_enabled = false; } $tmp_wpcache_filename = tempnam($cache_path, "wp-cache"); $fr = @fopen($tmp_wpcache_filename, 'w'); if (!$fr) { $buffer .= "<!-- File not cached! Super Cache Couldn't write to: " . str_replace(ABSPATH, '', $cache_path) . $cache_filename . " -->\n"; return $buffer; } if ($super_cache_enabled) { if (@is_dir($dir) == false) { @wp_mkdir_p($dir); } $user_info = wp_cache_get_cookies_values(); $do_cache = apply_filters('do_createsupercache', $user_info); if ($user_info == '' || $do_cache === true) { $cache_fname = "{$dir}index.html"; $tmp_cache_filename = tempnam($dir, "wpsupercache"); $fr2 = @fopen($tmp_cache_filename, 'w'); if ($cache_compression) { $gz = @fopen($tmp_cache_filename . ".gz", 'w'); } } } if (preg_match('/<!--mclude|<!--mfunc/', $buffer)) { //Dynamic content $store = preg_replace('|<!--mclude (.*?)-->(.*?)<!--/mclude-->|is', "<!--mclude-->\n<?php include_once('" . ABSPATH . "\$1'); ?>\n<!--/mclude-->", $buffer); $store = preg_replace('|<!--mfunc (.*?)-->(.*?)<!--/mfunc-->|is', "<!--mfunc-->\n<?php \$1 ;?>\n<!--/mfunc-->", $store); $store = apply_filters('wpsupercache_buffer', $store); $wp_cache_meta_object->dynamic = true; /* Clean function calls in tag */ $buffer = preg_replace('|<!--mclude (.*?)-->|is', '<!--mclude-->', $buffer); $buffer = preg_replace('|<!--mfunc (.*?)-->|is', '<!--mfunc-->', $buffer); fputs($fr, $store); if ($fr2) { fputs($fr2, $store . '<!-- super cache -->'); } if ($gz) { fputs($gz, gzencode($store . '<!-- super cache gz -->', 1, FORCE_GZIP)); } } else { $buffer = apply_filters('wpsupercache_buffer', $buffer); $log = "<!-- Cached page served by WP-Super-Cache -->\n"; if ($gz || $wp_cache_gzip_encoding) { $gzdata = gzencode($buffer . $log . "<!-- Compression = gzip -->", 3, FORCE_GZIP); $gzsize = strlen($gzdata); } if ($wp_cache_gzip_encoding) { array_push($wp_cache_meta_object->headers, 'Content-Encoding: ' . $wp_cache_gzip_encoding); array_push($wp_cache_meta_object->headers, 'Vary: Accept-Encoding, Cookie'); array_push($wp_cache_meta_object->headers, 'Content-Length: ' . strlen($gzdata)); // Return uncompressed data & store compressed for later use fputs($fr, $gzdata); } else { // no compression array_push($wp_cache_meta_object->headers, 'Vary: Cookie'); fputs($fr, $buffer . $log); } if ($fr2) { fputs($fr2, $buffer . '<!-- super cache -->'); } if ($gz) { fwrite($gz, $gzdata); } } $new_cache = true; fclose($fr); @chmod($tmp_wpcache_filename, 0666 & ~umask()); if (!@rename($tmp_wpcache_filename, $cache_path . $cache_filename)) { unlink($cache_path . $cache_filename); rename($tmp_wpcache_filename, $cache_path . $cache_filename); } if ($fr2) { fclose($fr2); @chmod($tmp_cache_filename, 0666 & ~umask()); if (!@rename($tmp_cache_filename, $cache_fname)) { unlink($cache_fname); rename($tmp_cache_filename, $cache_fname); } } if ($gz) { fclose($gz); if (!@rename($tmp_cache_filename . '.gz', $cache_fname . '.gz')) { unlink($cache_fname . '.gz'); rename($tmp_cache_filename . '.gz', $cache_fname . '.gz'); } } } wp_cache_writers_exit(); return $buffer; }
function nukeCachedPage() { if (function_exists('wp_cache_clean_cache') && function_exists('wp_cache_get_cookies_values')) { global $blogcacheid, $wp_cache_gzip_encoding; // copied from wp-cache-phase1.php $hashprefix = $blogcacheid . md5(aleph_get_user_profile_url($this->user_ID) . $wp_cache_gzip_encoding . wp_cache_get_cookies_values()); // hashprefix should now resemble that used for a given warrior url // e.g., http://racecharities.org/warrior/ereusser/ wp_cache_clean_cache($hashprefix); } }