diff -r 2f6f6f7551ca -r 32102edaa81b web/wp-content/plugins/wp-super-cache/wp-cache-phase1.php --- a/web/wp-content/plugins/wp-super-cache/wp-cache-phase1.php Thu Sep 16 15:45:36 2010 +0000 +++ b/web/wp-content/plugins/wp-super-cache/wp-cache-phase1.php Mon Nov 19 18:26:13 2012 +0100 @@ -1,269 +1,649 @@ - $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 ( $meta[ 'dynamic' ] ) { - if ( isset( $wp_super_cache_debug ) && $wp_super_cache_debug ) wp_cache_debug( "Serving wp-cache dynamic file", 5 ); - include($cache_file); - } else { - if ( isset( $wp_super_cache_debug ) && $wp_super_cache_debug ) wp_cache_debug( "Serving wp-cache static file", 5 ); - readfile( $cache_file ); - } - if ( isset( $wp_super_cache_debug ) && $wp_super_cache_debug ) wp_cache_debug( "exit request", 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 ); - } -} - -if(defined('DOING_CRON')) { - extract( wp_super_cache_init() ); - return true; -} - -if ( !isset( $wp_super_cache_late_init ) || ( isset( $wp_super_cache_late_init ) && false == $wp_super_cache_late_init ) ) { - wp_cache_serve_cache_file(); -} - -function wp_cache_postload() { - global $cache_enabled, $wp_super_cache_late_init, $wp_super_cache_debug; - - if ( !$cache_enabled || isset( $_GET[ 'preview' ] ) ) - return true; - - if ( isset( $wp_super_cache_late_init ) && true == $wp_super_cache_late_init ) { - if ( isset( $wp_super_cache_debug ) && $wp_super_cache_debug ) wp_cache_debug( "Supercache Late Init: add wp_cache_serve_cache_file to init", 3 ); - add_action( 'init', 'wp_cache_late_loader', 9999 ); - } else { - wp_super_cache_init(); - wp_cache_phase2(); - } -} - -function wp_cache_late_loader() { - global $wp_super_cache_debug; - if ( isset( $wp_super_cache_debug ) && $wp_super_cache_debug ) wp_cache_debug( "Supercache Late Loader running on init", 3 ); - wp_cache_serve_cache_file(); - wp_cache_phase2(); -} - -function wp_cache_get_cookies_values() { - $string = ''; - while ($key = key($_COOKIE)) { - if ( preg_match( "/^wp-postpass|^wordpress|^comment_author_/", $key ) ) { - if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) wp_cache_debug( "Cookie detected: $key", 5 ); - $string .= $_COOKIE[ $key ] . ","; - } - next($_COOKIE); - } - reset($_COOKIE); - - // If you use this hook, make sure you update your .htaccess rules with the same conditions - $string = do_cacheaction( 'wp_cache_get_cookies_values', $string ); - return $string; -} - -function add_cacheaction( $action, $func ) { - global $wp_supercache_actions; - $wp_supercache_actions[ $action ][] = $func; -} - -function do_cacheaction( $action, $value = '' ) { - global $wp_supercache_actions; - if( is_array( $wp_supercache_actions[ $action ] ) ) { - $actions = $wp_supercache_actions[ $action ]; - foreach( $actions as $func ) { - $value = $func( $value ); - } - } - - return $value; -} - -// From http://wordpress.org/extend/plugins/wordpress-mobile-edition/ by Alex King -function wp_cache_check_mobile( $cache_key ) { - global $wp_cache_mobile_enabled, $wp_cache_mobile_browsers, $wp_cache_mobile_whitelist; - if( !isset( $wp_cache_mobile_enabled ) || false == $wp_cache_mobile_enabled ) - return $cache_key; - - if (!isset($_SERVER["HTTP_USER_AGENT"])) { - return $cache_key; - } - $whitelist = explode( ',', $wp_cache_mobile_whitelist ); - foreach ($whitelist as $browser) { - if (strstr($_SERVER["HTTP_USER_AGENT"], trim($browser))) { - if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) wp_cache_debug( "whitelst mobile browser detected: " . $_SERVER[ "HTTP_USER_AGENT" ], 5 ); - return $cache_key; - } - } - - $browsers = explode( ',', $wp_cache_mobile_browsers ); - foreach ($browsers as $browser) { - if (strstr($_SERVER["HTTP_USER_AGENT"], trim( $browser ))) { - if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) wp_cache_debug( "mobile browser detected: " . $_SERVER[ "HTTP_USER_AGENT" ], 5 ); - return $cache_key . $browser; - } - } - return $cache_key; -} - -function wp_cache_debug( $message, $level = 1 ) { - global $wp_cache_debug_level, $wp_cache_debug_log, $wp_cache_debug_email, $cache_path, $wp_cache_debug_ip, $wp_super_cache_debug; - - if ( isset( $wp_super_cache_debug ) && $wp_super_cache_debug == false ) - return false; - - if ( isset( $wp_cache_debug_email ) == false && isset( $wp_cache_debug_log ) == false ) - return false; - - if ( isset( $wp_cache_debug_level ) == false ) - $wp_cache_debug_level = 1; - if ( $wp_cache_debug_level < $level ) - return false; - - if ( isset( $wp_cache_debug_ip ) && $wp_cache_debug_ip != '' && $wp_cache_debug_ip != $_SERVER[ 'REMOTE_ADDR' ] ) - return false; - - if ( isset( $wp_cache_debug_log ) && $wp_cache_debug_log != '' ) { - error_log( date( 'H:i:s' ) . " " . $_SERVER[ 'REQUEST_URI' ] . " " . $message . "\n", 3, $cache_path . str_replace( '/', '', str_replace( '..', '', $wp_cache_debug_log ) ) ); - } - - if ( isset( $wp_cache_debug_email ) && $wp_cache_debug_email != '' ) { - $message .= "\n\nDisable these emails by commenting out or deleting the line containing\n\$wp_cache_debug_email in wp-content/wp-cache-config.php on your server.\n"; - mail( $wp_cache_debug_email, '[' . addslashes( $_SERVER[ 'HTTP_HOST' ] ) . "] WP Super Cache Debug", $message ); - } -} - -function wp_cache_user_agent_is_rejected() { - global $cache_rejected_user_agent; - - if (!function_exists('apache_request_headers')) return false; - $headers = apache_request_headers(); - if (!isset($headers["User-Agent"])) return false; - foreach ($cache_rejected_user_agent as $expr) { - if (strlen($expr) > 0 && stristr($headers["User-Agent"], $expr)) - return true; - } - return false; -} - -?> +' . $cachefiledata . '\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 . ' $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 . '' . $uncompressed . '' . $cache . '{$func[1]}( $value ); + } else { + $value = $func( $value ); + } + } + } + + return $value; +} + +function wp_cache_mobile_group( $user_agent ) { + global $wp_cache_mobile_groups; + foreach( (array)$wp_cache_mobile_groups as $name => $group ) { + foreach( (array)$group as $browser ) { + $browser = trim( strtolower( $browser ) ); + if ( $browser != '' && strstr( $user_agent, $browser ) ) { + return $browser; + } + } + } + return "mobile"; +} + +// From http://wordpress.org/extend/plugins/wordpress-mobile-edition/ by Alex King +function wp_cache_check_mobile( $cache_key ) { + global $wp_cache_mobile_enabled, $wp_cache_mobile_browsers, $wp_cache_mobile_prefixes; + if ( !isset( $wp_cache_mobile_enabled ) || false == $wp_cache_mobile_enabled ) + return $cache_key; + + // allow plugins to short circuit mobile check. Cookie, extra UA checks? + switch( do_cacheaction( 'wp_cache_check_mobile', $cache_key ) ) { + case "normal": + return $cache_key; + break; + case "mobile": + return $cache_key . "-mobile"; + break; + } + + if ( !isset( $_SERVER[ "HTTP_USER_AGENT" ] ) ) { + return $cache_key; + } + + if ( do_cacheaction( 'disable_mobile_check', false ) ) + return $cache_key; + + $browsers = explode( ',', $wp_cache_mobile_browsers ); + $user_agent = strtolower( $_SERVER['HTTP_USER_AGENT'] ); + foreach ($browsers as $browser) { + if ( strstr( $user_agent, trim( strtolower( $browser ) ) ) ) { + if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) wp_cache_debug( "mobile browser detected: " . $_SERVER[ "HTTP_USER_AGENT" ], 5 ); + return $cache_key . '-' . wp_cache_mobile_group( $user_agent ); + } + } + if (isset($_SERVER['HTTP_X_WAP_PROFILE']) ) + return $cache_key . '-' . $_SERVER['HTTP_X_WAP_PROFILE']; + if (isset($_SERVER['HTTP_PROFILE']) ) + return $cache_key . '-' . $_SERVER['HTTP_PROFILE']; + + if ( isset( $wp_cache_mobile_prefixes ) ) { + $browsers = explode( ',', $wp_cache_mobile_prefixes ); + foreach ($browsers as $browser_prefix) { + if ( substr($user_agent, 0, 4) == $browser_prefix ) { + if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) wp_cache_debug( "mobile browser (prefix) detected: " . $_SERVER[ "HTTP_USER_AGENT" ], 5 ); + return $cache_key . '-' . $browser_prefix; + } + } + } + $accept = isset( $_SERVER[ 'HTTP_ACCEPT' ] ) ? strtolower( $_SERVER[ 'HTTP_ACCEPT' ] ) : ''; + if (strpos($accept, 'wap') !== false) { + return $cache_key . '-' . 'wap'; + } + + if (isset($_SERVER['ALL_HTTP']) && strpos(strtolower($_SERVER['ALL_HTTP']), 'operamini') !== false) { + return $cache_key . '-' . 'operamini'; + } + + return $cache_key; +} + +function wp_cache_debug( $message, $level = 1 ) { + global $wp_cache_debug_log, $cache_path, $wp_cache_debug_ip, $wp_super_cache_debug; + + if ( isset( $wp_super_cache_debug ) && $wp_super_cache_debug == false ) + return false; + + if ( isset( $wp_cache_debug_log ) == false ) + return false; + + if ( isset( $wp_cache_debug_ip ) && $wp_cache_debug_ip != '' && $wp_cache_debug_ip != $_SERVER[ 'REMOTE_ADDR' ] ) + return false; + + if ( isset( $wp_cache_debug_log ) && $wp_cache_debug_log != '' ) { + error_log( date( 'H:i:s' ) . " " . $_SERVER[ 'REQUEST_URI' ] . " " . $message . "\n", 3, $cache_path . str_replace( '/', '', str_replace( '..', '', $wp_cache_debug_log ) ) ); + } +} + +function wp_cache_user_agent_is_rejected() { + global $cache_rejected_user_agent; + + if (!function_exists('apache_request_headers')) return false; + $headers = apache_request_headers(); + if (!isset($headers["User-Agent"])) return false; + if ( false == is_array( $cache_rejected_user_agent ) ) + return false; + foreach ($cache_rejected_user_agent as $expr) { + if (strlen($expr) > 0 && stristr($headers["User-Agent"], $expr)) + return true; + } + return false; +} + +function get_supercache_dir( $blog_id = 0 ) { + global $cache_path; + if ( $blog_id == 0 ) { + $home = get_option( 'home' ); + } else { + $home = get_blog_option( $blog_id, 'home' ); + } + return apply_filters( 'wp_super_cache_supercachedir', $cache_path . 'supercache/' . trailingslashit( strtolower( preg_replace( '/:.*$/', '', str_replace( 'http://', '', str_replace( 'https://', '', $home ) ) ) ) ) ); +} +function get_current_url_supercache_dir( $post_id = 0 ) { + global $cached_direct_pages, $cache_path, $wp_cache_request_uri, $WPSC_HTTP_HOST, $wp_cache_home_path; + static $saved_supercache_dir = array(); + + if ( isset( $saved_supercache_dir[ $post_id ] ) ) { + return $saved_supercache_dir[ $post_id ]; + } + + $DONOTREMEMBER = 0; + if ( $post_id != 0 ) { + $site_url = site_url(); + $permalink = get_permalink( $post_id ); + if ( false === strpos( $permalink, $site_url ) ) { + /* + * Sometimes site_url doesn't return the siteurl. See http://wordpress.org/support/topic/wp-super-cache-not-refreshing-post-after-comments-made + */ + $DONOTREMEMBER = 1; + if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) wp_cache_debug( "get_current_url_supercache_dir: warning! site_url ($site_url) not found in permalink ($permalink).", 1 ); + if ( false === strpos( $permalink, $WPSC_HTTP_HOST ) ) { + if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) wp_cache_debug( "get_current_url_supercache_dir: WARNING! SERVER_NAME ({$WPSC_HTTP_HOST}) not found in permalink ($permalink). ", 1 ); + $p = parse_url( $permalink ); + if ( is_array( $p ) ) { + $uri = $p[ 'path' ]; + if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) wp_cache_debug( "get_current_url_supercache_dir: WARNING! Using $uri as permalink. Used parse_url.", 1 ); + } else { + if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) wp_cache_debug( "get_current_url_supercache_dir: WARNING! Permalink ($permalink) could not be understood by parse_url. Using front page.", 1 ); + $uri = ''; + } + } else { + if ( isset( $_SERVER[ 'HTTPS' ] ) ) + $protocol = ( 'on' == strtolower( $_SERVER[ 'HTTPS' ] ) ) ? 'https://' : 'http://'; + else + $protocol = 'http://'; + if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) wp_cache_debug( "get_current_url_supercache_dir: Removing SERVER_NAME ({$WPSC_HTTP_HOST}) and $protocol from permalink ($permalink). Is the url right?", 1 ); + $uri = str_replace( $WPSC_HTTP_HOST, '', $permalink ); + $uri = str_replace( $protocol, '', $uri ); + } + } else { + $uri = str_replace( $site_url, '', $permalink ); + if ( strpos( $uri, $wp_cache_home_path ) !== 0 ) + $uri = rtrim( $wp_cache_home_path, '/' ) . $uri; + } + } else { + $uri = strtolower( $wp_cache_request_uri ); + } + $uri = preg_replace('/[ <>\'\"\r\n\t\(\)]/', '', str_replace( '/index.php', '/', str_replace( '..', '', preg_replace("/(\?.*)?$/", '', $uri ) ) ) ); + $uri = str_replace( '\\', '', $uri ); + $dir = preg_replace( '/:.*$/', '', $WPSC_HTTP_HOST ) . $uri; // To avoid XSS attacks + if ( function_exists( "apply_filters" ) ) { + $dir = apply_filters( 'supercache_dir', $dir ); + } else { + $dir = do_cacheaction( 'supercache_dir', $dir ); + } + $dir = $cache_path . 'supercache/' . $dir . '/'; + if( is_array( $cached_direct_pages ) && in_array( $_SERVER[ 'REQUEST_URI' ], $cached_direct_pages ) ) { + $dir = ABSPATH . $uri . '/'; + } + $dir = str_replace( '//', '/', $dir ); + if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) wp_cache_debug( "supercache dir: $dir", 5 ); + if ( $DONOTREMEMBER == 0 ) + $saved_supercache_dir[ $post_id ] = $dir; + return $dir; +} + +function get_all_supercache_filenames( $dir = '' ) { + global $wp_cache_mobile_enabled; + + $filenames = array( 'index.html', 'index-https.html', 'index.html.php' ); + + if ( $dir != '' && isset( $wp_cache_mobile_enabled ) && $wp_cache_mobile_enabled ) { + // open directory and look for index-*.html files + if ( is_dir( $dir ) && $dh = opendir( $dir ) ) { + while ( ( $file = readdir( $dh ) ) !== false ) { + if ( substr( $file, 0, 6 ) == 'index-' && strpos( $file, '.html' ) ) + $filenames[] = $file; + } + closedir( $dh ); + } + } + + if ( function_exists( "apply_filters" ) ) { + $filenames = apply_filters( 'all_supercache_filenames', $filenames ); + } else { + $filenames = do_cacheaction( 'all_supercache_filenames', $filenames ); + } + + foreach( $filenames as $file ) { + $out[] = $file; + $out[] = $file . '.gz'; + } + + return $out; +} + +function supercache_filename() { + //Add support for https and http caching + $is_https = ( ( isset( $_SERVER[ 'HTTPS' ] ) && 'on' == strtolower( $_SERVER[ 'HTTPS' ] ) ) || ( isset( $_SERVER[ 'HTTP_X_FORWARDED_PROTO' ] ) && 'https' == strtolower( $_SERVER[ 'HTTP_X_FORWARDED_PROTO' ] ) ) ); //Also supports https requests coming from an nginx reverse proxy + $extra_str = $is_https ? '-https' : ''; + + if ( function_exists( "apply_filters" ) ) { + $extra_str = apply_filters( 'supercache_filename_str', $extra_str ); + } else { + $extra_str = do_cacheaction( 'supercache_filename_str', $extra_str ); + } + $filename = 'index' . $extra_str . '.html'; + + return $filename; +} + +function get_oc_version() { + $wp_cache_oc_key = wp_cache_get( "wp_cache_oc_key" ); + if ( ! $wp_cache_oc_key ) { + $wp_cache_oc_key[ 'key' ] = reset_oc_version(); + } elseif ( $wp_cache_oc_key[ 'ts' ] < time() - 600 ) + wp_cache_set( "wp_cache_oc_key", array( 'ts' => time(), 'key' => $wp_cache_oc_key[ 'key' ] ) ); + return $wp_cache_oc_key[ 'key' ]; +} + +function reset_oc_version( $version = 1 ) { + if ( $version == 1 ) + $version = mt_rand(); + wp_cache_set( "wp_cache_oc_key", array( 'ts' => time(), 'key' => $version ) ); + + return $version; +} + +function get_oc_key( $url = false ) { + global $wp_cache_gzip_encoding, $WPSC_HTTP_HOST; + + if ( $url ) { + $key = intval( $_SERVER[ 'SERVER_PORT' ] ) . strtolower( preg_replace( '/:.*$/', '', $WPSC_HTTP_HOST ) ) . $url; + } else { + $key = get_current_url_supercache_dir(); + } + return $key . $wp_cache_gzip_encoding . get_oc_version(); +} + +function wp_supercache_cache_for_admins() { + if ( isset( $_GET[ 'preview' ] ) || function_exists( "is_admin" ) && is_admin() ) + return $cookies; + + if ( false == do_cacheaction( 'wp_supercache_remove_cookies', true ) ) + return true; + + $cookie_keys = array( 'wordpress_logged_in', 'comment_author_' ); + if ( defined( 'LOGGED_IN_COOKIE' ) ) + $cookie_keys[] = constant( 'LOGGED_IN_COOKIE' ); + reset( $_COOKIE ); + foreach( $_COOKIE as $cookie => $val ) { + reset( $cookie_keys ); + foreach( $cookie_keys as $key ) { + if ( strpos( $cookie, $key ) !== FALSE ) { + if ( isset( $GLOBALS[ 'wp_super_cache_debug' ] ) && $GLOBALS[ 'wp_super_cache_debug' ] ) wp_cache_debug( 'Removing auth from $_COOKIE to allow caching for logged user (' . $cookie . ')', 5 ); + unset( $_COOKIE[ $cookie ] ); + } + } + } +} + +?>