Пример #1
0
 function super_cache_invalidate()
 {
     //Now, we are actually using the referrer and not the request, with some precautions
     $GLOBALS['wp_cache_request_uri'] = substr($_SERVER['HTTP_REFERER'], stripos($_SERVER['HTTP_REFERER'], $_SERVER['HTTP_HOST']) + strlen($_SERVER[''] . $_SERVER['HTTP_HOST']));
     $GLOBALS['wp_cache_request_uri'] = preg_replace('/[ <>\'\\"\\r\\n\\t\\(\\)]/', '', str_replace('/index.php', '/', str_replace('..', '', preg_replace("/(\\?.*)?\$/", '', $GLOBALS['wp_cache_request_uri']))));
     // get some supercache variables
     extract(wp_super_cache_init());
     tp_logger(wp_super_cache_init());
     // this is hackery for logged in users, a cookie is added to the request somehow and gzip is not correctly set, so we forcefully fix this
     if (!$cache_file) {
         $GLOBALS['wp_cache_gzip_encoding'] = gzip_accepted();
         unset($_COOKIE[key($_COOKIE)]);
         extract(wp_super_cache_init());
         tp_logger(wp_super_cache_init());
     }
     $dir = get_current_url_supercache_dir();
     // delete possible files that we can figure out, not deleting files for other cookies for example, but will do the trick in most cases
     $cache_fname = "{$dir}index.html";
     tp_logger("attempting delete of supercache: {$cache_fname}");
     @unlink($cache_fname);
     $cache_fname = "{$dir}index.html.gz";
     tp_logger("attempting delete of supercache: {$cache_fname}");
     @unlink($cache_fname);
     tp_logger("attempting delete of wp_cache: {$cache_file}");
     @unlink($cache_file);
     tp_logger("attempting delete of wp_cache_meta: {$meta_pathname}");
     @unlink($meta_pathname);
     // go at edit pages too
     $GLOBALS['wp_cache_request_uri'] .= "?edit=1";
     extract(wp_super_cache_init());
     tp_logger(wp_super_cache_init());
     tp_logger("attempting delete of edit_wp_cache: {$cache_file}");
     @unlink($cache_file);
     tp_logger("attempting delete of edit_wp_cache_meta: {$meta_pathname}");
     @unlink($meta_pathname);
 }
Пример #2
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_shutdown_callback()
{
    global $cache_path, $cache_max_time, $file_expired, $file_prefix, $meta_file, $new_cache, $wp_cache_meta, $known_headers, $blog_id, $wp_cache_gzip_encoding, $gzsize, $cache_filename, $supercacheonly, $blog_cache_dir;
    global $wp_cache_request_uri, $wp_cache_key, $wp_cache_object_cache, $cache_enabled, $wp_cache_blog_charset, $wp_cache_not_logged_in;
    $wp_cache_meta['uri'] = $_SERVER["SERVER_NAME"] . preg_replace('/[ <>\'\\"\\r\\n\\t\\(\\)]/', '', $wp_cache_request_uri);
    // To avoid XSS attacks
    $wp_cache_meta['blog_id'] = $blog_id;
    $wp_cache_meta['post'] = wp_cache_post_id();
    $wp_cache_meta['key'] = $wp_cache_key;
    $wp_cache_meta = apply_filters('wp_cache_meta', $wp_cache_meta);
    $response = wp_cache_get_response_headers();
    foreach ($known_headers as $key) {
        if (isset($response[$key])) {
            $wp_cache_meta['headers'][$key] = "{$key}: " . $response[$key];
        }
    }
    if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) {
        wp_cache_debug("wp_cache_shutdown_callback: collecting meta data.", 2);
    }
    if (!isset($response['Last-Modified'])) {
        $value = gmdate('D, d M Y H:i:s') . ' GMT';
        /* Dont send this the first time */
        /* @header('Last-Modified: ' . $value); */
        $wp_cache_meta['headers']['Last-Modified'] = "Last-Modified: {$value}";
    }
    if (!isset($response['Content-Type']) && !isset($response['Content-type'])) {
        // On some systems, headers set by PHP can't be fetched from
        // the output buffer. This is a last ditch effort to set the
        // correct Content-Type header for feeds, if we didn't see
        // it in the response headers already. -- dougal
        if (is_feed()) {
            $type = get_query_var('feed');
            $type = str_replace('/', '', $type);
            switch ($type) {
                case 'atom':
                    $value = "application/atom+xml";
                    break;
                case 'rdf':
                    $value = "application/rdf+xml";
                    break;
                case 'rss':
                case 'rss2':
                default:
                    $value = "application/rss+xml";
            }
        } else {
            // not a feed
            $value = get_option('html_type');
            if ($value == '') {
                $value = 'text/html';
            }
        }
        $value .= "; charset=\"" . $wp_cache_blog_charset . "\"";
        if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) {
            wp_cache_debug("Sending 'Content-Type: {$value}' header.", 2);
        }
        @header("Content-Type: {$value}");
        $wp_cache_meta['headers']['Content-Type'] = "Content-Type: {$value}";
    }
    if (!$supercacheonly && !$wp_cache_not_logged_in && $new_cache) {
        if (!isset($wp_cache_meta['dynamic']) && $wp_cache_gzip_encoding && !in_array('Content-Encoding: ' . $wp_cache_gzip_encoding, $wp_cache_meta['headers'])) {
            if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) {
                wp_cache_debug("Sending gzip headers.", 2);
            }
            $wp_cache_meta['headers']['Content-Encoding'] = 'Content-Encoding: ' . $wp_cache_gzip_encoding;
            $wp_cache_meta['headers']['Vary'] = 'Vary: Accept-Encoding, Cookie';
        }
        $serial = serialize($wp_cache_meta);
        if (wp_cache_writers_entry()) {
            if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) {
                wp_cache_debug("Writing meta file: {$blog_cache_dir}meta/{$meta_file}", 2);
            }
            if (false == $wp_cache_object_cache) {
                $tmp_meta_filename = $blog_cache_dir . 'meta/' . uniqid(mt_rand(), true) . '.tmp';
                $fr = @fopen($tmp_meta_filename, 'w');
                if (!$fr) {
                    @mkdir($blog_cache_dir . 'meta');
                }
                $fr = @fopen($tmp_meta_filename, 'w');
                if ($fr) {
                    fputs($fr, $serial);
                    fclose($fr);
                    @chmod($tmp_meta_filename, 0666 & ~umask());
                    if (!@rename($tmp_meta_filename, $blog_cache_dir . 'meta/' . $meta_file)) {
                        @unlink($blog_cache_dir . 'meta/' . $meta_file);
                        @rename($tmp_meta_filename, $blog_cache_dir . 'meta/' . $meta_file);
                    }
                } else {
                    if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) {
                        wp_cache_debug("Problem writing meta file: {$blog_cache_dir}meta/{$meta_file}", 2);
                    }
                }
            } elseif ($cache_enabled) {
                $oc_key = get_oc_key() . ".meta";
                if (gzip_accepted()) {
                    $oc_key .= ".gz";
                }
                wp_cache_set($oc_key, $serial, 'supercache', $cache_max_time);
            }
            wp_cache_writers_exit();
        }
    }
    global $time_to_gc_cache;
    if (isset($time_to_gc_cache) && $time_to_gc_cache == 1) {
        if (isset($GLOBALS['wp_super_cache_debug']) && $GLOBALS['wp_super_cache_debug']) {
            wp_cache_debug("Executing wp_cache_gc action.", 3);
        }
        do_action('wp_cache_gc');
    }
}
Пример #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;
    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;
    }
}
Пример #5
0
$wp_cache_gzip_encoding = '';
$gzipped = 0;
$gzsize = 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();
Пример #6
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;
    }
}