예제 #1
0
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');
}
예제 #2
0
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;
    }
}
예제 #3
0
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;
    }
}
예제 #4
0
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)) {
예제 #7
0
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;
    }
}
예제 #8
0
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)))) {
예제 #9
0
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;
    }
}
예제 #10
0
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;
    }
}
예제 #11
0
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;
}
예제 #12
0
파일: warrior.php 프로젝트: evocateur/race
 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);
     }
 }