index-wp-redis.php 2.64 KB
Newer Older
Benjamin Adams's avatar
Benjamin Adams committed
1 2
<?php

Benjamin Adams's avatar
Benjamin Adams committed
3
$seconds_cache_redis = 60*60*12; // 12 hours by default, you can change in this in wp-admin options page
Benjamin Adams's avatar
Benjamin Adams committed
4
$ip_of_your_website = '64.90.38.145';  //You must set this to the IP of your website
Benjamin Adams's avatar
Benjamin Adams committed
5
$secret_string = "changeme";    /*This is if you want to manually refresh the cache
Benjamin Adams's avatar
Benjamin Adams committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
								 ex: http://example.com/sample-post?refresh=changeme    */

 
// so we don't confuse the cloudflare server 
if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) {
	$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP'];
}

define('WP_USE_THEMES', true);
 
// Start the timer so we can track the page load time
$start = microtime();
 
include("wp-content/plugins/wp-redis-cache/predis5.2.php");  //we need this to use Redis inside of PHP
$redis = new Predis_Client();
 
$current_url = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
$current_url = str_replace("?refresh=$secret_string", '', $current_url);  //clean up the URL
$current_url = str_replace("&refresh=$secret_string", '', $current_url);
$redis_key = md5($current_url);

//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 || ($_SERVER['HTTP_REFERER'] == $current_url && $_SERVER['REQUEST_URI'] != '/' && $_SERVER['REMOTE_ADDR'] != $ip_of_your_website)) {

	$redis->del($redis_key);
	require('./wp-blog-header.php');
 
// This page is cached, lets display it
} else if ($redis->exists($redis_key)) {
	$html_of_page = $redis->get($redis_key);
	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) {
	require('./wp-blog-header.php');
	$html_of_page = @file_get_contents($current_url);

	$usr_seconds=get_option('wp-redis-cache-seconds');  //if the user has the seconds defined in the admin section use it
	if(isset($usr_seconds) &&   is_numeric($usr_seconds))
	{
		$seconds_cache_redis=$usr_seconds;
	}
	
	if(strlen($html_of_page) > 5000)
	{
	$redis->setex($redis_key, $seconds_cache_redis, $html_of_page);
	}
 
// This is what your server should get if no cache exists
} else {
	require('./wp-blog-header.php');
}
 
 

if ($_SERVER['REMOTE_ADDR'] != $ip_of_your_website) {
// How long did it take to load the page? (CloudFlare may strip out comments)
$end = microtime();
$time = (@getMicroTime($end) - @getMicroTime($start));
	echo "<!-- Cache system by Benjamin Adams. Page generated in ".round($time,5)." seconds. -->";
}


function getMicroTime($t) {
	list($usec, $sec) = explode(" ",$t);
	return ((float)$usec + (float)$sec);
}



?>