diff --git a/index-wp-redis.php b/index-wp-redis.php index 23cebf3eac688b8fc6d25585e7887de08918c853..759d1a796c24b019ecd7affd8f3ab88fc02f1899 100644 --- a/index-wp-redis.php +++ b/index-wp-redis.php @@ -3,125 +3,150 @@ // Start the timer so we can track the page load time $start = microtime(); -function getMicroTime($t) -{ - list($usec, $sec) = explode(" ", $t); +function getMicroTime($time) { + list($usec, $sec) = explode(" ", $time); return ((float) $usec + (float) $sec); } +function refreshHasSecret($secret) { + return isset($_GET['refresh']) && $_GET['refresh'] == $secret; +} -$debug = true; -$cache = false; -$ip_of_your_website = '127.0.0.1'; -$secret_string = 'changeme'; - +function requestHasSecret($secret) { + return strpos($_SERVER['REQUEST_URI'],"refresh=${secret}")!==false; +} +function isRemotePageLoad($currentUrl, $websiteIp) { + return (isset($_SERVER['HTTP_REFERER']) + && $_SERVER['HTTP_REFERER']== $currentUrl + && $_SERVER['REQUEST_URI'] != '/' + && $_SERVER['REMOTE_ADDR'] != $websiteIp); +} +function handleCDNRemoteAddressing() { + // so we don't confuse the cloudflare server + if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { + $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP']; + } +} -// so we don't confuse the cloudflare server -if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { - $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP']; +function getCleanUrl($secret) { + $replaceKeys = array("?refresh=${secret}","&refresh=${secret}"); + $url = "http://${_SERVER['HTTP_HOST']}${_SERVER['REQUEST_URI']}"; + $current_url = str_replace($replaceKeys, '', $url); + return $current_url; } - + +$debug = true; +$cache = true; +$websiteIp = '127.0.0.1'; +$reddis_server = '127.0.0.1'; +$secret_string = 'changeme'; +$current_url = getCleanUrl($secret_string); +$redis_key = md5($current_url); + +handleCDNRemoteAddressing(); if(!defined('WP_USE_THEMES')) { define('WP_USE_THEMES', true); } -$current_url = str_replace(array("?refresh=${secret_string}","&refresh=${secret_string}"), '', "http://${_SERVER['HTTP_HOST']}${_SERVER['REQUEST_URI']}"); //clean up the URL -$redis_key = md5($current_url); - -// check if the user was logged in to wp -$cookie = var_export($_COOKIE, true); -$loggedin = preg_match("/wordpress_logged_in/", $cookie); - try { // check if PECL Extension is available if (class_exists('Redis')) { + if ($debug) { + echo "<!-- Redis PECL module found -->\n"; + } $redis = new Redis(); - + // Sockets can be used as well. Documentation @ https://github.com/nicolasff/phpredis/#connection - $redis->connect('127.0.0.1'); + $redis->connect($reddis_server); - } else // Fallback to predis5.2.php - { + } else { // Fallback to predis5.2.php + + if ($debug) { + echo "<!-- using predis as a backup -->\n"; + } include_once("wp-content/plugins/wp-redis-cache/predis5.2.php"); //we need this to use Redis inside of PHP $redis = new Predis_Client(); } //Either manual refresh cache by adding ?refresh=secret_string after the URL or somebody posting a comment - if (isset($_GET['refresh']) || $_GET['refresh'] == $secret_string || strpos($_SERVER['REQUEST_URI'],"refresh=${secret_string}")!==false || ($_SERVER['HTTP_REFERER'] == $current_url && $_SERVER['REQUEST_URI'] != '/' && $_SERVER['REMOTE_ADDR'] != $ip_of_your_website)) { - + if (refreshHasSecret($secret_string) || requestHasSecret($secret_string) || isRemotePageLoad($current_url, $websiteIp)) { + if ($debug) { + echo "<!-- manual refresh was required -->\n"; + } $redis->del($redis_key); require('./wp-blog-header.php'); - - // if the user was logged in, don't show a cached site - } else if ($loggedin) { - - require('./wp-blog-header.php'); - + + $unlimited = get_option('wp-redis-cache-debug',false); + $seconds_cache_redis = get_option('wp-redis-cache-seconds',43200); // This page is cached, lets display it } else if ($redis->exists($redis_key)) { - $cache = true; + if ($debug) { + echo "<!-- serving page from cache: key: $redis_key -->\n"; + } + $cache = true; $html_of_page = $redis->get($redis_key); - echo $html_of_page; - + echo $html_of_page; + // If the cache does not exist lets display the user the normal page without cache, and then fetch a new cache page - } else if ($_SERVER['REMOTE_ADDR'] != $ip_of_your_website && strstr($current_url, 'preview=true') == false) { + } else if ($_SERVER['REMOTE_ADDR'] != $websiteIp && strstr($current_url, 'preview=true') == false) { + if ($debug) { + echo "<!-- displaying page without cache -->\n"; + } $isPOST = ($_SERVER['REQUEST_METHOD'] === 'POST') ? 1 : 0; - if ($isPost == 0) { + $loggedIn = preg_match("/wordpress_logged_in/", var_export($_COOKIE, true)); + if (!$isPOST && !$loggedIn) { ob_start(); require('./wp-blog-header.php'); $html_of_page = ob_get_contents(); ob_end_clean(); - echo $html_of_page; - - $unlimited = get_option('wp-redis-cache-debug',false); - $seconds_cache_redis = get_option('wp-redis-cache-seconds',43200); - if (!is_numeric($seconds_cache_redis)) { - $seconds_cache_redis = 43200; - } - - - // When a page displays after an "HTTP 404: Not Found" error occurs, do not cache - // When the search was used, do not cache + echo $html_of_page; + + if (!is_numeric($seconds_cache_redis)) { + $seconds_cache_redis = 43200; + } + + // When a page displays after an "HTTP 404: Not Found" error occurs, do not cache + // When the search was used, do not cache if ((!is_404()) and (!is_search())) { if ($unlimited) { - $redis->set($redis_key, $html_of_page); + $redis->set($redis_key, $html_of_page); + } else { + $redis->setex($redis_key, $seconds_cache_redis, $html_of_page); } - else - { - $redis->setex($redis_key, $seconds_cache_redis, $html_of_page); - } } - //either the user is logged in, or is posting a comment, show them uncached - } else { + } else { //either the user is logged in, or is posting a comment, show them uncached require('./wp-blog-header.php'); } - } else if ($_SERVER['REMOTE_ADDR'] != $ip_of_your_website && strstr($current_url, 'preview=true') == true) { + } else if ($_SERVER['REMOTE_ADDR'] != $websiteIp && strstr($current_url, 'preview=true') == true) { require('./wp-blog-header.php'); } - // else { // This is what your server should get if no cache exists //depricated, as the ob_start() is cleaner + // else { // This is what your server should get if no cache exists //deprecated, as the ob_start() is cleaner // require('./wp-blog-header.php'); // } } catch (Exception $e) { - require('./wp-blog-header.php'); + //require('./wp-blog-header.php'); + echo "something went wrong"; } - $end = microtime(); $time = (@getMicroTime($end) - @getMicroTime($start)); if ($debug) { - echo "<!-- Cache system by Benjamin Adams. Page generated in " . round($time, 5) . " seconds. -->"; - echo "<!-- Site was cached = " . $cache . " -->"; - echo "<!-- wp-redis-cache-seconds = " . $seconds_cache_redis . " -->"; - echo "<!-- wp-redis-cache-secret = " . $secret_string . "-->"; - echo "<!-- wp-redis-cache-ip = " . $ip_of_your_website . "-->"; - echo "<!-- wp-redis-cache-unlimited = " . $unlimited . "-->"; - echo "<!-- wp-redis-cache-debug = " . $debug . "-->"; + echo "<!-- Cache system by Benjamin Adams. Page generated in " . round($time, 5) . " seconds. -->\n"; + echo "<!-- Site was cached = " . $cache . " -->\n"; + if (isset($seconds_cache_redis)) { + echo "<!-- wp-redis-cache-seconds = " . $seconds_cache_redis . " -->\n"; + } + echo "<!-- wp-redis-cache-secret = " . $secret_string . "-->\n"; + echo "<!-- wp-redis-cache-ip = " . $websiteIp . "-->\n"; + if (isset($unlimited)) { + echo "<!-- wp-redis-cache-unlimited = " . $unlimited . "-->\n"; + } + echo "<!-- wp-redis-cache-debug = " . $debug . "-->\n"; } - diff --git a/index.php b/index.php index 10819505fb460b442daebee09d2ab5e39556fde5..9c286824165f18e5e3706acd2820b9a9547657df 100644 --- a/index.php +++ b/index.php @@ -1,8 +1,2 @@ <?php - require('index-wp-redis.php'); - -//define('WP_USE_THEMES', true); -//require('./wp-blog-header.php'); - -?> \ No newline at end of file