Version Description
Download this release
Release Info
| Developer | donncha |
| Plugin | |
| Version | 0.1 |
| Comparing to | |
| See all releases | |
Version 0.1
- plugins/searchengine.php +80 -0
- readme.txt +156 -0
- wp-cache-base.php +13 -0
- wp-cache-config-sample.php +53 -0
- wp-cache-phase1.php +110 -0
- wp-cache-phase2.php +410 -0
- wp-cache.php +704 -0
plugins/searchengine.php
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
function wp_supercache_searchengine( $string ) {
|
| 3 |
+
global $passingthrough, $nevershowads, $cache_no_adverts_for_friends;
|
| 4 |
+
|
| 5 |
+
if( $cache_no_adverts_for_friends != 'yes' )
|
| 6 |
+
return $string;
|
| 7 |
+
|
| 8 |
+
if( $_COOKIE[ '7a1254cba80da02d5478d91cfd0a873a' ] == 1 ) {
|
| 9 |
+
$string = 'searchengine';
|
| 10 |
+
} elseif( $_SERVER[ 'HTTP_REFERER' ] != '' ) {
|
| 11 |
+
if( is_array( $passingthrough ) == false )
|
| 12 |
+
return $string;
|
| 13 |
+
|
| 14 |
+
foreach( $passingthrough as $url ) {
|
| 15 |
+
if( strpos( $_SERVER[ 'HTTP_REFERER' ], $url ) ) {
|
| 16 |
+
reset( $nevershowads );
|
| 17 |
+
$se = false;
|
| 18 |
+
foreach( $nevershowads as $whitesite ) {
|
| 19 |
+
if( false == strpos( $_SERVER[ 'HTTP_REFERER' ], $whitesite ) ) {
|
| 20 |
+
$se = true;
|
| 21 |
+
}
|
| 22 |
+
}
|
| 23 |
+
if( $se ) {
|
| 24 |
+
$string = 'searchengine';
|
| 25 |
+
setcookie( '7a1254cba80da02d5478d91cfd0a873a', 1, time()+3600, '/' );
|
| 26 |
+
}
|
| 27 |
+
}
|
| 28 |
+
}
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
return $string;
|
| 32 |
+
}
|
| 33 |
+
add_cacheaction( 'wp_cache_get_cookies_values', 'wp_supercache_searchengine' );
|
| 34 |
+
|
| 35 |
+
function searchenginesupercache( $user_info ) {
|
| 36 |
+
if( $user_info == 'searchengine' && is_single() && is_old_post() ) {
|
| 37 |
+
return true;
|
| 38 |
+
} else {
|
| 39 |
+
return false;
|
| 40 |
+
}
|
| 41 |
+
return $string;
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
function searchengine_phase2_actions() {
|
| 45 |
+
global $cache_no_adverts_for_friends;
|
| 46 |
+
if( $cache_no_adverts_for_friends == 'yes' ) {
|
| 47 |
+
add_filter( 'do_createsupercache', 'searchenginesupercache' );
|
| 48 |
+
}
|
| 49 |
+
}
|
| 50 |
+
add_cacheaction( 'add_cacheaction', 'searchengine_phase2_actions' );
|
| 51 |
+
|
| 52 |
+
function wp_supercache_searchengine_admin() {
|
| 53 |
+
global $cache_no_adverts_for_friends, $wp_cache_config_file, $valid_nonce;
|
| 54 |
+
|
| 55 |
+
$cache_no_adverts_for_friends = $cache_no_adverts_for_friends == '' ? 'no' : $cache_no_adverts_for_friends;
|
| 56 |
+
|
| 57 |
+
if(isset($_POST['cache_no_adverts_for_friends']) && $valid_nonce) {
|
| 58 |
+
$cache_no_adverts_for_friends = $_POST['cache_no_adverts_for_friends'] == 'Disable' ? 'no' : 'yes';
|
| 59 |
+
wp_cache_replace_line('^ *\$cache_no_adverts_for_friends', "\$cache_no_adverts_for_friends = '$cache_no_adverts_for_friends';", $wp_cache_config_file);
|
| 60 |
+
}
|
| 61 |
+
echo '<form name="wp_supercache_searchengine_admin" action="'. $_SERVER["REQUEST_URI"] . '" method="post">';
|
| 62 |
+
wp_nonce_field('wp-cache');
|
| 63 |
+
echo '<strong><a href="http://ocaoimh.ie/no-adverts-for-friends/">No Adverts for Friends</a> plugin is ';
|
| 64 |
+
if( $cache_no_adverts_for_friends == 'no' ) {
|
| 65 |
+
echo 'disabled';
|
| 66 |
+
} else {
|
| 67 |
+
echo 'enabled';
|
| 68 |
+
}
|
| 69 |
+
echo '.</strong> (requires <a href="http://ocaoimh.ie/no-adverts-for-friends/">friendsadverts.php</a> too)<div class="submit">';
|
| 70 |
+
if( $cache_no_adverts_for_friends == 'no' ) {
|
| 71 |
+
echo '<input type="submit" name="cache_no_adverts_for_friends" value="Enable" />';
|
| 72 |
+
} else {
|
| 73 |
+
echo '<input type="submit" name="cache_no_adverts_for_friends" value="Disable" />';
|
| 74 |
+
}
|
| 75 |
+
echo "</div></form>\n";
|
| 76 |
+
|
| 77 |
+
}
|
| 78 |
+
add_cacheaction( 'cache_admin_page', 'wp_supercache_searchengine_admin' );
|
| 79 |
+
|
| 80 |
+
?>
|
readme.txt
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
=== WP Super Cache ===
|
| 2 |
+
Contributors: donncha
|
| 3 |
+
Tags: performance,caching,wp-cache
|
| 4 |
+
Tested up to: 2.3.1
|
| 5 |
+
|
| 6 |
+
A modification of WP-Cache that produces static html files.
|
| 7 |
+
|
| 8 |
+
== Description ==
|
| 9 |
+
A modification of WP-Cache that produces static html files. After a html file
|
| 10 |
+
is generated your webserver will serve that file instead of processing the
|
| 11 |
+
comparatively heavier and more expensive WordPress PHP scripts.
|
| 12 |
+
It will only cache and serve files to users who are not logged in, who
|
| 13 |
+
have not left a comment on your blog, or who have viewed a password protected
|
| 14 |
+
post. That still probably leave 90% of your visitors who will benefit. The users
|
| 15 |
+
mentioned above will also benefit because your server won't be as busy as before.
|
| 16 |
+
This script should help your server cope with a front page appearance on digg.com
|
| 17 |
+
or other social networking site.
|
| 18 |
+
|
| 19 |
+
This plugin is a modified version of the WP-Cache 2 plugin by Ricardo Galli Granada.
|
| 20 |
+
His plugin is still available. We're standing on the shoulders of giants and benefiting
|
| 21 |
+
from the power of the GPL here. Thanks Ricardo for creating such a great plugin!
|
| 22 |
+
See the following URLs for more info on WP-Cache 2
|
| 23 |
+
|
| 24 |
+
1. http://mnm.uib.es/gallir/wp-cache-2/
|
| 25 |
+
2. http://wordpress.org/extend/plugins/wp-cache/
|
| 26 |
+
|
| 27 |
+
A classic method of preparing an underpowered site for a Digg frontpage appearance
|
| 28 |
+
or a Slashdotting has been to manually save copies of dynamically generated pages,
|
| 29 |
+
and place them in directories that match the permalinks structure.
|
| 30 |
+
|
| 31 |
+
This method of performance enhancement does help servers handle a higher load
|
| 32 |
+
without crashing, but is only effective when an oncoming rush of traffic can be
|
| 33 |
+
anticipated.
|
| 34 |
+
|
| 35 |
+
WP-Cache alone, while helpful, is not adequate in many cases, so this modification
|
| 36 |
+
was created to effectively mimic the manual page caching method, but to handle it
|
| 37 |
+
in an automated fashion.
|
| 38 |
+
|
| 39 |
+
Original WP-Cache by Ricardo Galli Granada, http://mnm.uib.es/gallir/
|
| 40 |
+
WP Super Cache by Donncha O Caoimh, http://ocaoimh.ie/
|
| 41 |
+
|
| 42 |
+
== Installation ==
|
| 43 |
+
1. You must have fancy permalinks enabled for this to work.
|
| 44 |
+
2. If you have WP-Cache installed already, please disable it. Edit wp-config.php
|
| 45 |
+
and make sure the WP_CACHE define is deleted, and remove the file
|
| 46 |
+
wp-content/advanced-cache.php.
|
| 47 |
+
3. Upload this directory to your plugins directory. It will create a
|
| 48 |
+
'wp-content/plugins/wp-super-cache/' directory.
|
| 49 |
+
4. If you are using WordPress MU you will need to install this in
|
| 50 |
+
'wp-content/mu-plugins/wp-super-cache/' and the file wp-cache.php
|
| 51 |
+
must be copied into the mu-plugins directory.
|
| 52 |
+
5. WordPress users should go to their Plugins page and activate "WP Super Cache".
|
| 53 |
+
6. Now go to Options->WP Super Cache and enable caching. If you see an error message
|
| 54 |
+
or a blank screen you may need to fix it. See the "FAQ" section later in this
|
| 55 |
+
readme for instructions.
|
| 56 |
+
7. Edit the .htaccess file in your root directory and add the following code:
|
| 57 |
+
|
| 58 |
+
RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
|
| 59 |
+
RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
|
| 60 |
+
RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
|
| 61 |
+
RewriteCond %{HTTP:Accept-Encoding} gzip
|
| 62 |
+
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz -f
|
| 63 |
+
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz [L]
|
| 64 |
+
|
| 65 |
+
RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
|
| 66 |
+
RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
|
| 67 |
+
RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
|
| 68 |
+
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html -f
|
| 69 |
+
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html [L]
|
| 70 |
+
|
| 71 |
+
That code must be inserted above the standard WordPress rewrite rules.
|
| 72 |
+
If your blog isn't located at the root of your server, you must add that directory
|
| 73 |
+
to the rules. For example, if your blog is in the directory "/blog/":
|
| 74 |
+
|
| 75 |
+
RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
|
| 76 |
+
RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
|
| 77 |
+
RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
|
| 78 |
+
RewriteCond %{HTTP:Accept-Encoding} gzip
|
| 79 |
+
RewriteCond %{DOCUMENT_ROOT}/blog/wp-content/cache/supercache/%{HTTP_HOST}/blog/$1index.html.gz -f
|
| 80 |
+
RewriteRule ^(.*) /blog/wp-content/cache/supercache/%{HTTP_HOST}/blog/$1index.html.gz [L]
|
| 81 |
+
|
| 82 |
+
RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
|
| 83 |
+
RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
|
| 84 |
+
RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
|
| 85 |
+
RewriteCond %{DOCUMENT_ROOT}/blog/wp-content/cache/supercache/%{HTTP_HOST}/blog/$1index.html -f
|
| 86 |
+
RewriteRule ^(.*) /blog/wp-content/cache/supercache/%{HTTP_HOST}/$1/blog/index.html [L]
|
| 87 |
+
|
| 88 |
+
Your .htaccess should look similar to this:
|
| 89 |
+
|
| 90 |
+
-----------------.htaccess-----------------
|
| 91 |
+
RewriteEngine On
|
| 92 |
+
RewriteBase /
|
| 93 |
+
|
| 94 |
+
RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
|
| 95 |
+
RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
|
| 96 |
+
RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
|
| 97 |
+
RewriteCond %{HTTP:Accept-Encoding} gzip
|
| 98 |
+
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz -f
|
| 99 |
+
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz [L]
|
| 100 |
+
|
| 101 |
+
RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
|
| 102 |
+
RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
|
| 103 |
+
RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
|
| 104 |
+
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html -f
|
| 105 |
+
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html [L]
|
| 106 |
+
|
| 107 |
+
RewriteCond %{REQUEST_FILENAME} !-f
|
| 108 |
+
RewriteCond %{REQUEST_FILENAME} !-d
|
| 109 |
+
RewriteRule . /index.php [L]
|
| 110 |
+
-----------------.htaccess-----------------
|
| 111 |
+
|
| 112 |
+
== Frequently Asked Questions ==
|
| 113 |
+
If things don't work when you installed the plugin here are a few things to check:
|
| 114 |
+
1. Is wp-content writable by the web server?
|
| 115 |
+
2. Is there a wp-content/wp-cache-config.php ? If not, copy the file
|
| 116 |
+
wp-super-cache/wp-cache-config-sample.php to wp-content/wp-cache-config.php
|
| 117 |
+
and make sure WPCACHEHOME points at the right place. "plugins" should be
|
| 118 |
+
"mu-plugins" if you're using WordPress MU.
|
| 119 |
+
3. Is there a wp-content/advanced-cache.php ? If not, then you must symlink
|
| 120 |
+
wp-super-cache/wp-cache-phase1.php to it with the command while in the
|
| 121 |
+
wp-content folder:
|
| 122 |
+
ln -s plugins/wp-super-cache/wp-cache-phase1.php advanced-cache.php
|
| 123 |
+
If you can't do that, then copy the file. That will work too.
|
| 124 |
+
4. Make sure the following line is in wp-config.php
|
| 125 |
+
define( 'WP_CACHE', true );
|
| 126 |
+
5. Try the Options->WP Super Cache page again and enable cache.
|
| 127 |
+
6. Look in wp-content/cache/supercache/. Are there directories and files there?
|
| 128 |
+
7. Anything in your php error_log?
|
| 129 |
+
8. If your browser keeps asking you to save the file after the super cache is installed
|
| 130 |
+
you must disable Super Cache compression. Go to the Options->WP Super Cache page and disable
|
| 131 |
+
it there.
|
| 132 |
+
|
| 133 |
+
== Custom Caching ==
|
| 134 |
+
It is now possible to hook into the caching process using the add_cacheacton() function.
|
| 135 |
+
Three hooks are available:
|
| 136 |
+
|
| 137 |
+
1. 'wp_cache_get_cookies_values' - modify the key used by WP Cache.
|
| 138 |
+
2. 'add_cacheaction' - runs in phase2. Allows a plugin to add WordPress hooks.
|
| 139 |
+
3. 'cache_admin_page' - runs in the admin page. Use it to add modify that page.
|
| 140 |
+
|
| 141 |
+
There is one regular WordPress filter too. Use the "do_createsupercache" filter
|
| 142 |
+
to customize the checks made before caching. The filter accepts one parameter.
|
| 143 |
+
The output of WP-Cache's wp_cache_get_cookies_values() function.
|
| 144 |
+
|
| 145 |
+
See plugins/searchengine.php as an example I use for my [No Adverts for Friends](plugin at http://ocaoimh.ie/no-adverts-for-friends/)
|
| 146 |
+
|
| 147 |
+
== Updates ==
|
| 148 |
+
Updates to the plugin will be posted here, to http://ocaoimh.ie/ and the page
|
| 149 |
+
http://ocaoimh.ie/wp-super-cache/ will always link to the newest version.
|
| 150 |
+
|
| 151 |
+
== Thanks ==
|
| 152 |
+
I would sincerely like to thank [John Pozadzides](http://onemansblog.com/) for
|
| 153 |
+
giving me the idea for this, for writing the "How it works" section and for
|
| 154 |
+
testing the plugin through 2 front page appearances on digg.com
|
| 155 |
+
Thanks to James Farmer and Andrew Billits of [Edu Blogs](http://edublogs.org/) fame who helped me
|
| 156 |
+
make this more WordPress MU friendly.
|
wp-cache-base.php
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
$known_headers = array("Last-Modified", "Expires", "Content-Type", "Content-type", "X-Pingback", "ETag", "Cache-Control", "Pragma");
|
| 3 |
+
|
| 4 |
+
if (!class_exists('CacheMeta')) {
|
| 5 |
+
class CacheMeta {
|
| 6 |
+
var $dynamic = false;
|
| 7 |
+
var $headers = array();
|
| 8 |
+
var $uri = '';
|
| 9 |
+
var $post = 0;
|
| 10 |
+
}
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
?>
|
wp-cache-config-sample.php
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
WP-Cache Config Sample File
|
| 4 |
+
|
| 5 |
+
See wp-cache.php for author details.
|
| 6 |
+
*/
|
| 7 |
+
|
| 8 |
+
define( 'WPCACHEHOME', ABSPATH . 'wp-content/plugins/wp-super-cache/' );
|
| 9 |
+
|
| 10 |
+
$cache_compression = 0; // Super cache compression
|
| 11 |
+
$cache_enabled = false;
|
| 12 |
+
$super_cache_enabled = false;
|
| 13 |
+
$cache_max_time = 3600; //in seconds
|
| 14 |
+
//$use_flock = true; // Set it true or false if you know what to use
|
| 15 |
+
$super_cache_max_time = 21600; // in seconds
|
| 16 |
+
$cache_path = ABSPATH . 'wp-content/cache/';
|
| 17 |
+
$file_prefix = 'wp-cache-';
|
| 18 |
+
|
| 19 |
+
// We want to be able to identify each blog in a WordPress MU install
|
| 20 |
+
$blogcacheid = '';
|
| 21 |
+
if( defined( 'VHOST' ) ) {
|
| 22 |
+
$blogcacheid = 'blog'; // main blog
|
| 23 |
+
if( constant( 'VHOST' ) == 'yes' ) {
|
| 24 |
+
$blogcacheid = $_SERVER['HTTP_HOST'];
|
| 25 |
+
} else {
|
| 26 |
+
$request_uri = preg_replace('/[ <>\'\"\r\n\t\(\)]/', '', str_replace( '..', '', $_SERVER['REQUEST_URI'] ) );
|
| 27 |
+
if( strpos( $request_uri, '/', 1 ) ) {
|
| 28 |
+
if( $base == '/' ) {
|
| 29 |
+
$blogcacheid = substr( $request_uri, 1, strpos( $request_uri, '/', 1 ) - 1 );
|
| 30 |
+
} else {
|
| 31 |
+
$blogcacheid = str_replace( $base, '', $request_uri );
|
| 32 |
+
$blogcacheid = substr( $blogcacheid, 0, strpos( $blogcacheid, '/', 1 ) );
|
| 33 |
+
}
|
| 34 |
+
if ( '/' == substr($blogcacheid, -1))
|
| 35 |
+
$blogcacheid = substr($blogcacheid, 0, -1);
|
| 36 |
+
}
|
| 37 |
+
}
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
// Array of files that have 'wp-' but should still be cached
|
| 41 |
+
$cache_acceptable_files = array( 'wp-atom.php', 'wp-comments-popup.php', 'wp-commentsrss2.php', 'wp-links-opml.php', 'wp-locations.php', 'wp-rdf.php', 'wp-rss.php', 'wp-rss2.php');
|
| 42 |
+
|
| 43 |
+
$cache_rejected_uri = array('wp-');
|
| 44 |
+
$cache_rejected_user_agent = array ( 0 => 'bot', 1 => 'ia_archive', 2 => 'slurp', 3 => 'crawl', 4 => 'spider');
|
| 45 |
+
|
| 46 |
+
// Just modify it if you have conflicts with semaphores
|
| 47 |
+
$sem_id = 5419;
|
| 48 |
+
|
| 49 |
+
if ( '/' != substr($cache_path, -1)) {
|
| 50 |
+
$cache_path .= '/';
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
?>
|
wp-cache-phase1.php
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
if( !@include(ABSPATH . 'wp-content/wp-cache-config.php') ) {
|
| 3 |
+
return;
|
| 4 |
+
}
|
| 5 |
+
if( !defined( 'WPCACHEHOME' ) )
|
| 6 |
+
define('WPCACHEHOME', dirname(__FILE__).'/');
|
| 7 |
+
|
| 8 |
+
include( WPCACHEHOME . 'wp-cache-base.php');
|
| 9 |
+
|
| 10 |
+
$mutex_filename = 'wp_cache_mutex.lock';
|
| 11 |
+
$new_cache = false;
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
// Don't change variables behind this point
|
| 15 |
+
|
| 16 |
+
$plugins = glob( WPCACHEHOME . 'plugins/*.php' );
|
| 17 |
+
if( is_array( $plugins ) ) {
|
| 18 |
+
foreach ( $plugins as $plugin ) {
|
| 19 |
+
if( is_file( $plugin ) )
|
| 20 |
+
require_once( $plugin );
|
| 21 |
+
}
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
if (!$cache_enabled || $_SERVER["REQUEST_METHOD"] == 'POST')
|
| 25 |
+
return;
|
| 26 |
+
|
| 27 |
+
$file_expired = false;
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
$cache_filename = '';
|
| 31 |
+
$meta_file = '';
|
| 32 |
+
|
| 33 |
+
$key = $blogcacheid . md5($_SERVER['HTTP_HOST'].preg_replace('/#.*$/', '', $_SERVER['REQUEST_URI']).wp_cache_get_cookies_values());
|
| 34 |
+
$cache_filename = $file_prefix . $key . '.html';
|
| 35 |
+
$meta_file = $file_prefix . $key . '.meta';
|
| 36 |
+
$cache_file = $cache_path . $cache_filename;
|
| 37 |
+
$meta_pathname = $cache_path . 'meta/' . $meta_file;
|
| 38 |
+
|
| 39 |
+
$wp_start_time = microtime();
|
| 40 |
+
if( ($mtime = @filemtime($meta_pathname)) ) {
|
| 41 |
+
if ($mtime + $cache_max_time > time() ) {
|
| 42 |
+
$meta = new CacheMeta;
|
| 43 |
+
if (! ($meta = unserialize(@file_get_contents($meta_pathname))) )
|
| 44 |
+
return;
|
| 45 |
+
foreach ($meta->headers as $header) {
|
| 46 |
+
header($header);
|
| 47 |
+
}
|
| 48 |
+
$log = "<!-- Cached page served by WP-Cache -->\n";
|
| 49 |
+
if ( !($content_size = @filesize($cache_file)) > 0 || $mtime < @filemtime($cache_file))
|
| 50 |
+
return;
|
| 51 |
+
if ($meta->dynamic) {
|
| 52 |
+
include($cache_file);
|
| 53 |
+
} else {
|
| 54 |
+
/* No used to avoid problems with some PHP installations
|
| 55 |
+
$content_size += strlen($log);
|
| 56 |
+
header("Content-Length: $content_size");
|
| 57 |
+
*/
|
| 58 |
+
if(!@readfile ($cache_file))
|
| 59 |
+
return;
|
| 60 |
+
}
|
| 61 |
+
echo $log;
|
| 62 |
+
die;
|
| 63 |
+
}
|
| 64 |
+
$file_expired = true; // To signal this file was expired
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
function wp_cache_postload() {
|
| 68 |
+
global $cache_enabled;
|
| 69 |
+
|
| 70 |
+
if (!$cache_enabled)
|
| 71 |
+
return;
|
| 72 |
+
require( WPCACHEHOME . 'wp-cache-phase2.php');
|
| 73 |
+
wp_cache_phase2();
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
function wp_cache_get_cookies_values() {
|
| 77 |
+
global $wp_supercache_actions, $passingthrough, $nevershowads;
|
| 78 |
+
$string = '';
|
| 79 |
+
while ($key = key($_COOKIE)) {
|
| 80 |
+
if (preg_match("/^wp-postpass|^wordpress|^comment_author_email_/", $key)) {
|
| 81 |
+
$string .= $_COOKIE[$key] . ",";
|
| 82 |
+
}
|
| 83 |
+
next($_COOKIE);
|
| 84 |
+
}
|
| 85 |
+
reset($_COOKIE);
|
| 86 |
+
if( $string != '' )
|
| 87 |
+
return $string;
|
| 88 |
+
|
| 89 |
+
$string = do_cacheaction( 'wp_cache_get_cookies_values', $string );
|
| 90 |
+
return $string;
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
function add_cacheaction( $action, $func ) {
|
| 94 |
+
global $wp_supercache_actions;
|
| 95 |
+
$wp_supercache_actions[ $action ][] = $func;
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
function do_cacheaction( $action, $value = '' ) {
|
| 99 |
+
global $wp_supercache_actions;
|
| 100 |
+
if( is_array( $wp_supercache_actions[ $action ] ) ) {
|
| 101 |
+
$actions = $wp_supercache_actions[ $action ];
|
| 102 |
+
foreach( $actions as $func ) {
|
| 103 |
+
$value = $func( $value );
|
| 104 |
+
}
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
return $value;
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
?>
|
wp-cache-phase2.php
ADDED
|
@@ -0,0 +1,410 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/** Diable here because PHP4.3 does not make the global
|
| 4 |
+
Serious bug?
|
| 5 |
+
|
| 6 |
+
$mutex_filename = 'wp_cache_mutex.lock';
|
| 7 |
+
$new_cache = false;
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
function wp_cache_phase2() {
|
| 11 |
+
global $cache_filename, $cache_acceptable_files, $wp_cache_meta_object;
|
| 12 |
+
|
| 13 |
+
wp_cache_mutex_init();
|
| 14 |
+
if(function_exists('add_action')) {
|
| 15 |
+
// Post ID is received
|
| 16 |
+
add_action('publish_post', 'wp_cache_post_change', 0);
|
| 17 |
+
add_action('edit_post', 'wp_cache_post_change', 0);
|
| 18 |
+
add_action('delete_post', 'wp_cache_post_change', 0);
|
| 19 |
+
add_action('publish_phone', 'wp_cache_post_change', 0);
|
| 20 |
+
// Coment ID is received
|
| 21 |
+
add_action('trackback_post', 'wp_cache_get_postid_from_comment', 0);
|
| 22 |
+
add_action('pingback_post', 'wp_cache_get_postid_from_comment', 0);
|
| 23 |
+
add_action('comment_post', 'wp_cache_get_postid_from_comment', 0);
|
| 24 |
+
add_action('edit_comment', 'wp_cache_get_postid_from_comment', 0);
|
| 25 |
+
add_action('wp_set_comment_status', 'wp_cache_get_postid_from_comment', 0);
|
| 26 |
+
// No post_id is available
|
| 27 |
+
add_action('delete_comment', 'wp_cache_no_postid', 0);
|
| 28 |
+
add_action('switch_theme', 'wp_cache_no_postid', 0);
|
| 29 |
+
|
| 30 |
+
do_cacheaction( 'add_cacheaction' );
|
| 31 |
+
}
|
| 32 |
+
if( $_SERVER["REQUEST_METHOD"] == 'POST' || get_option('gzipcompression'))
|
| 33 |
+
return;
|
| 34 |
+
$script = basename($_SERVER['PHP_SELF']);
|
| 35 |
+
if (!in_array($script, $cache_acceptable_files) &&
|
| 36 |
+
wp_cache_is_rejected($_SERVER["REQUEST_URI"]))
|
| 37 |
+
return;
|
| 38 |
+
if (wp_cache_user_agent_is_rejected()) return;
|
| 39 |
+
$wp_cache_meta_object = new CacheMeta;
|
| 40 |
+
ob_start('wp_cache_ob_callback');
|
| 41 |
+
register_shutdown_function('wp_cache_shutdown_callback');
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
function wp_cache_get_response_headers() {
|
| 45 |
+
if(function_exists('apache_response_headers')) {
|
| 46 |
+
$headers = apache_response_headers();
|
| 47 |
+
} else if(function_exists('headers_list')) {
|
| 48 |
+
$headers = array();
|
| 49 |
+
foreach(headers_list() as $hdr) {
|
| 50 |
+
list($header_name, $header_value) = explode(': ', $hdr, 2);
|
| 51 |
+
$headers[$header_name] = $header_value;
|
| 52 |
+
}
|
| 53 |
+
} else
|
| 54 |
+
$headers = null;
|
| 55 |
+
|
| 56 |
+
return $headers;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
function wp_cache_is_rejected($uri) {
|
| 60 |
+
global $cache_rejected_uri;
|
| 61 |
+
|
| 62 |
+
if (strstr($uri, '/wp-admin/'))
|
| 63 |
+
return true; //we don't allow cacheing wp-admin for security
|
| 64 |
+
foreach ($cache_rejected_uri as $expr) {
|
| 65 |
+
if (strlen($expr) > 0 && substr( $uri, 1, strlen($expr) ) == $expr && strpos( $uri, '.php' ) )
|
| 66 |
+
return true;
|
| 67 |
+
}
|
| 68 |
+
return false;
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
function wp_cache_user_agent_is_rejected() {
|
| 72 |
+
global $cache_rejected_user_agent;
|
| 73 |
+
|
| 74 |
+
if (!function_exists('apache_request_headers')) return false;
|
| 75 |
+
$headers = apache_request_headers();
|
| 76 |
+
if (!isset($headers["User-Agent"])) return false;
|
| 77 |
+
foreach ($cache_rejected_user_agent as $expr) {
|
| 78 |
+
if (strlen($expr) > 0 && stristr($headers["User-Agent"], $expr))
|
| 79 |
+
return true;
|
| 80 |
+
}
|
| 81 |
+
return false;
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
function wp_cache_mutex_init() {
|
| 86 |
+
global $use_flock, $mutex, $cache_path, $mutex_filename, $sem_id;
|
| 87 |
+
|
| 88 |
+
if(!is_bool($use_flock)) {
|
| 89 |
+
if(function_exists('sem_get'))
|
| 90 |
+
$use_flock = false;
|
| 91 |
+
else
|
| 92 |
+
$use_flock = true;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
if ($use_flock)
|
| 96 |
+
$mutex = fopen($cache_path . $mutex_filename, 'w');
|
| 97 |
+
else
|
| 98 |
+
$mutex = sem_get($sem_id, 1, 0644 | IPC_CREAT, 1);
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
function wp_cache_writers_entry() {
|
| 102 |
+
global $use_flock, $mutex, $cache_path, $mutex_filename;
|
| 103 |
+
|
| 104 |
+
if ($use_flock)
|
| 105 |
+
flock($mutex, LOCK_EX);
|
| 106 |
+
else
|
| 107 |
+
sem_acquire($mutex);
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
function wp_cache_writers_exit() {
|
| 111 |
+
global $use_flock, $mutex, $cache_path, $mutex_filename;
|
| 112 |
+
|
| 113 |
+
if ($use_flock)
|
| 114 |
+
flock($mutex, LOCK_UN);
|
| 115 |
+
else
|
| 116 |
+
sem_release($mutex);
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
function wp_cache_ob_callback($buffer) {
|
| 120 |
+
global $cache_path, $cache_filename, $meta_file, $wp_start_time;
|
| 121 |
+
global $new_cache, $wp_cache_meta_object, $file_expired, $blog_id, $cache_compression;
|
| 122 |
+
|
| 123 |
+
|
| 124 |
+
/* Mode paranoic, check for closing tags
|
| 125 |
+
* we avoid caching incomplete files */
|
| 126 |
+
if (is_404() || !preg_match('/(<\/html>|<\/rss>|<\/feed>)/i',$buffer) ) {
|
| 127 |
+
$new_cache = false;
|
| 128 |
+
return $buffer;
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
$duration = wp_cache_microtime_diff($wp_start_time, microtime());
|
| 132 |
+
$duration = sprintf("%0.3f", $duration);
|
| 133 |
+
$buffer .= "\n<!-- Dynamic Page Served (once) in $duration seconds -->\n";
|
| 134 |
+
|
| 135 |
+
wp_cache_writers_entry();
|
| 136 |
+
$mtime = @filemtime($cache_path . $cache_filename);
|
| 137 |
+
/* Return if:
|
| 138 |
+
the file didn't exist before but it does exist now (another connection created)
|
| 139 |
+
OR
|
| 140 |
+
the file was expired and its mtime is less than 5 seconds
|
| 141 |
+
*/
|
| 142 |
+
if( !((!$file_expired && $mtime) || ($mtime && $file_expired && (time() - $mtime) < 5)) ) {
|
| 143 |
+
$dir = strtolower(preg_replace('/:.*$/', '', $_SERVER["HTTP_HOST"])).preg_replace('/[ <>\'\"\r\n\t\(\)]/', '', str_replace( '..', '', $_SERVER['REQUEST_URI']) ); // To avoid XSS attacs
|
| 144 |
+
$dir = trailingslashit( $cache_path . 'supercache/' . $dir );
|
| 145 |
+
if( is_dir( substr( $dir, 0, -1 ) . '.disabled' ) ) {
|
| 146 |
+
return $buffer;
|
| 147 |
+
}
|
| 148 |
+
if( is_dir( $dir ) == false && is_dir( substr( $dir, 0, -1 ) . '.disabled' ) == false ) {
|
| 149 |
+
@mkpath( $dir );
|
| 150 |
+
}
|
| 151 |
+
|
| 152 |
+
$fr = @fopen($cache_path . $cache_filename, 'w');
|
| 153 |
+
if (!$fr)
|
| 154 |
+
$buffer = "Couldn't write to: " . $cache_path . $cache_filename . "\n";
|
| 155 |
+
$user_info = wp_cache_get_cookies_values();
|
| 156 |
+
$do_cache = apply_filters( 'do_createsupercache', $user_info );
|
| 157 |
+
if( $user_info == '' || $do_cache === true ) {
|
| 158 |
+
$fr2 = @fopen("{$dir}index.html", 'w');
|
| 159 |
+
if( $cache_compression )
|
| 160 |
+
$gz = @gzopen("{$dir}index.html.gz", 'w3');
|
| 161 |
+
}
|
| 162 |
+
|
| 163 |
+
if (preg_match('/<!--mclude|<!--mfunc/', $buffer)) { //Dynamic content
|
| 164 |
+
$store = preg_replace('|<!--mclude (.*?)-->(.*?)<!--/mclude-->|is',
|
| 165 |
+
"<!--mclude-->\n<?php include_once('" . ABSPATH . "$1'); ?>\n<!--/mclude-->", $buffer);
|
| 166 |
+
$store = preg_replace('|<!--mfunc (.*?)-->(.*?)<!--/mfunc-->|is',
|
| 167 |
+
"<!--mfunc-->\n<?php $1 ;?>\n<!--/mfunc-->", $store);
|
| 168 |
+
$wp_cache_meta_object->dynamic = true;
|
| 169 |
+
/* Clean function calls in tag */
|
| 170 |
+
$buffer = preg_replace('|<!--mclude (.*?)-->|is', '<!--mclude-->', $buffer);
|
| 171 |
+
$buffer = preg_replace('|<!--mfunc (.*?)-->|is', '<!--mfunc-->', $buffer);
|
| 172 |
+
fputs($fr, $store);
|
| 173 |
+
if( $fr2 )
|
| 174 |
+
fputs($fr2, $store . '<!-- super cache -->' );
|
| 175 |
+
if( $gz )
|
| 176 |
+
gzwrite($gz, $store . '<!-- super cache gz -->' );
|
| 177 |
+
} else {
|
| 178 |
+
fputs($fr, $buffer);
|
| 179 |
+
if( $fr2 )
|
| 180 |
+
fputs($fr2, $buffer . '<!-- super cache -->' );
|
| 181 |
+
if( $gz )
|
| 182 |
+
gzwrite($gz, $buffer . '<!-- super cache gz -->' );
|
| 183 |
+
}
|
| 184 |
+
$new_cache = true;
|
| 185 |
+
fclose($fr);
|
| 186 |
+
if( $fr2 )
|
| 187 |
+
fclose($fr2);
|
| 188 |
+
if( $gz )
|
| 189 |
+
fclose($gz);
|
| 190 |
+
}
|
| 191 |
+
wp_cache_writers_exit();
|
| 192 |
+
return $buffer;
|
| 193 |
+
}
|
| 194 |
+
|
| 195 |
+
function wp_cache_phase2_clean_cache($file_prefix) {
|
| 196 |
+
global $cache_path;
|
| 197 |
+
|
| 198 |
+
wp_cache_writers_entry();
|
| 199 |
+
if ( ($handle = opendir( $cache_path )) ) {
|
| 200 |
+
while ( false !== ($file = readdir($handle))) {
|
| 201 |
+
if ( preg_match("/^$file_prefix/", $file) ) {
|
| 202 |
+
unlink($cache_path . $file);
|
| 203 |
+
}
|
| 204 |
+
}
|
| 205 |
+
closedir($handle);
|
| 206 |
+
}
|
| 207 |
+
wp_cache_writers_exit();
|
| 208 |
+
}
|
| 209 |
+
|
| 210 |
+
function prune_super_cache($directory, $force = false) {
|
| 211 |
+
global $super_cache_max_time, $cache_path;
|
| 212 |
+
|
| 213 |
+
if( !isset( $super_cache_max_time ) )
|
| 214 |
+
$super_cache_max_time = 21600;
|
| 215 |
+
|
| 216 |
+
$now = time();
|
| 217 |
+
|
| 218 |
+
if (is_dir($directory)) {
|
| 219 |
+
$entries = glob($directory. '/*');
|
| 220 |
+
foreach ($entries as $entry) {
|
| 221 |
+
if ($entry != '.' && $entry != '..') {
|
| 222 |
+
prune_super_cache($entry, $force);
|
| 223 |
+
if( $force || is_dir( $entry ) && @filemtime( $entry ) + $super_cache_max_time <= $now ) {
|
| 224 |
+
if( $entry != $cache_path . '/meta' )
|
| 225 |
+
@rmdir( $entry );
|
| 226 |
+
}
|
| 227 |
+
}
|
| 228 |
+
}
|
| 229 |
+
} else {
|
| 230 |
+
if( $force || is_file($directory) && filemtime( $directory ) + $super_cache_max_time <= $now )
|
| 231 |
+
unlink($directory);
|
| 232 |
+
}
|
| 233 |
+
}
|
| 234 |
+
|
| 235 |
+
function wp_cache_phase2_clean_expired($file_prefix) {
|
| 236 |
+
global $cache_path, $cache_max_time;
|
| 237 |
+
|
| 238 |
+
clearstatcache();
|
| 239 |
+
wp_cache_writers_entry();
|
| 240 |
+
$now = time();
|
| 241 |
+
if ( ($handle = opendir( $cache_path )) ) {
|
| 242 |
+
while ( false !== ($file = readdir($handle))) {
|
| 243 |
+
if ( preg_match("/^$file_prefix/", $file) &&
|
| 244 |
+
(filemtime($cache_path . $file) + $cache_max_time) <= $now ) {
|
| 245 |
+
@unlink($cache_path . $file);
|
| 246 |
+
@unlink($cache_path . 'meta/' . str_replace( '.html', '.meta', $file ) );
|
| 247 |
+
continue;
|
| 248 |
+
}
|
| 249 |
+
if($file != '.' && $file != '..') {
|
| 250 |
+
if ( is_dir( $cache_path . $file ) == false && (filemtime($cache_path . $file) + $cache_max_time) <= $now ) {
|
| 251 |
+
@unlink($cache_path . $file);
|
| 252 |
+
} elseif( is_dir( $cache_path . $file ) ) {
|
| 253 |
+
prune_super_cache( $cache_path . $file );
|
| 254 |
+
}
|
| 255 |
+
}
|
| 256 |
+
}
|
| 257 |
+
closedir($handle);
|
| 258 |
+
}
|
| 259 |
+
|
| 260 |
+
wp_cache_writers_exit();
|
| 261 |
+
}
|
| 262 |
+
|
| 263 |
+
function wp_cache_shutdown_callback() {
|
| 264 |
+
global $cache_path, $cache_max_time, $file_expired, $file_prefix, $meta_file, $new_cache;
|
| 265 |
+
global $wp_cache_meta_object, $known_headers, $blog_id;
|
| 266 |
+
|
| 267 |
+
$wp_cache_meta_object->uri = $_SERVER["SERVER_NAME"].preg_replace('/[ <>\'\"\r\n\t\(\)]/', '', $_SERVER['REQUEST_URI']); // To avoid XSS attacs
|
| 268 |
+
$wp_cache_meta_object->blog_id=$blog_id;
|
| 269 |
+
$wp_cache_meta_object->post = wp_cache_post_id();
|
| 270 |
+
|
| 271 |
+
$response = wp_cache_get_response_headers();
|
| 272 |
+
$wp_cache_meta_object->headers = array();
|
| 273 |
+
foreach ($known_headers as $key) {
|
| 274 |
+
if(isset($response{$key})) {
|
| 275 |
+
array_push($wp_cache_meta_object->headers, "$key: " . $response{$key});
|
| 276 |
+
}
|
| 277 |
+
}
|
| 278 |
+
/* Not used because it gives problems with some
|
| 279 |
+
* PHP installations
|
| 280 |
+
if (!$response{'Content-Length'}) {
|
| 281 |
+
// WP does not set content size
|
| 282 |
+
$content_size = ob_get_length();
|
| 283 |
+
@header("Content-Length: $content_size");
|
| 284 |
+
array_push($wp_cache_meta_object->headers, "Content-Length: $content_size");
|
| 285 |
+
}
|
| 286 |
+
*/
|
| 287 |
+
if (!$response{'Last-Modified'}) {
|
| 288 |
+
$value = gmdate('D, d M Y H:i:s') . ' GMT';
|
| 289 |
+
/* Dont send this the first time */
|
| 290 |
+
/* @header('Last-Modified: ' . $value); */
|
| 291 |
+
array_push($wp_cache_meta_object->headers, "Last-Modified: $value");
|
| 292 |
+
}
|
| 293 |
+
if (!$response{'Content-Type'} && !$response{'Content-type'}) {
|
| 294 |
+
$value = "text/html; charset=" . get_settings('blog_charset');
|
| 295 |
+
@header("Content-Type: $value");
|
| 296 |
+
array_push($wp_cache_meta_object->headers, "Content-Type: $value");
|
| 297 |
+
}
|
| 298 |
+
|
| 299 |
+
ob_end_flush();
|
| 300 |
+
if ($new_cache) {
|
| 301 |
+
$serial = serialize($wp_cache_meta_object);
|
| 302 |
+
wp_cache_writers_entry();
|
| 303 |
+
$fr = fopen($cache_path . 'meta/' . $meta_file, 'w');
|
| 304 |
+
if( !$fr )
|
| 305 |
+
@mkdir( $cache_path . 'meta/' );
|
| 306 |
+
$fr = fopen($cache_path . 'meta/' . $meta_file, 'w');
|
| 307 |
+
fputs($fr, $serial);
|
| 308 |
+
fclose($fr);
|
| 309 |
+
wp_cache_writers_exit();
|
| 310 |
+
}
|
| 311 |
+
|
| 312 |
+
if ($file_expired == false) {
|
| 313 |
+
return;
|
| 314 |
+
}
|
| 315 |
+
|
| 316 |
+
// we delete expired files
|
| 317 |
+
flush(); //Ensure we send data to the client
|
| 318 |
+
wp_cache_phase2_clean_expired($file_prefix);
|
| 319 |
+
}
|
| 320 |
+
|
| 321 |
+
function wp_cache_no_postid($id) {
|
| 322 |
+
return wp_cache_post_change(wp_cache_post_id());
|
| 323 |
+
}
|
| 324 |
+
|
| 325 |
+
function wp_cache_get_postid_from_comment($comment_id) {
|
| 326 |
+
$comment = get_commentdata($comment_id, 1, true);
|
| 327 |
+
$postid = $comment['comment_post_ID'];
|
| 328 |
+
// Do nothing if comment is not moderated
|
| 329 |
+
// http://ocaoimh.ie/2006/12/05/caching-wordpress-with-wp-cache-in-a-spam-filled-world
|
| 330 |
+
if( !preg_match('/wp-admin\//', $_SERVER['REQUEST_URI']) && $comment['comment_approved'] == 'spam' ) // changed from 1 to "spam"
|
| 331 |
+
return $post_id;
|
| 332 |
+
// We must check it up again due to WP bugs calling two different actions
|
| 333 |
+
// for delete, for example both wp_set_comment_status and delete_comment
|
| 334 |
+
// are called when deleting a comment
|
| 335 |
+
if ($postid > 0)
|
| 336 |
+
return wp_cache_post_change($postid);
|
| 337 |
+
else
|
| 338 |
+
return wp_cache_post_change(wp_cache_post_id());
|
| 339 |
+
}
|
| 340 |
+
|
| 341 |
+
function wp_cache_post_change($post_id) {
|
| 342 |
+
global $file_prefix;
|
| 343 |
+
global $cache_path;
|
| 344 |
+
global $blog_id;
|
| 345 |
+
global $blogcacheid;
|
| 346 |
+
static $last_processed = -1;
|
| 347 |
+
|
| 348 |
+
// Avoid cleaning twice the same pages
|
| 349 |
+
if ($post_id == $last_processed) return $post_id;
|
| 350 |
+
$last_processed = $post_id;
|
| 351 |
+
$permalink = trailingslashit( str_replace( get_option( 'siteurl' ), '', post_permalink( $post_id ) ) );
|
| 352 |
+
$siteurl = str_replace( 'http://', '', get_option( 'siteurl' ) );
|
| 353 |
+
$dir = $cache_path . 'supercache/' . strtolower(preg_replace('/:.*$/', '', $siteurl ) );
|
| 354 |
+
$files_to_delete = array( $dir . '/index.html', $dir . '/feed/index.html', $dir . $permalink . 'index.html', $dir . $permalink . 'feed/index.html' );
|
| 355 |
+
foreach( $files_to_delete as $cache_file ) {
|
| 356 |
+
@unlink( $cache_file );
|
| 357 |
+
@unlink( $cache_file . '.gz' );
|
| 358 |
+
}
|
| 359 |
+
|
| 360 |
+
$meta = new CacheMeta;
|
| 361 |
+
$matches = array();
|
| 362 |
+
wp_cache_writers_entry();
|
| 363 |
+
if ( ($handle = opendir( $cache_path . 'meta/' )) ) {
|
| 364 |
+
while ( false !== ($file = readdir($handle))) {
|
| 365 |
+
if ( preg_match("/^({$file_prefix}{$blogcacheid}.*)\.meta/", $file, $matches) ) {
|
| 366 |
+
$meta_pathname = $cache_path . 'meta/' . $file;
|
| 367 |
+
$content_pathname = $cache_path . $matches[1] . ".html";
|
| 368 |
+
$meta = unserialize(@file_get_contents($meta_pathname));
|
| 369 |
+
if ($post_id > 0 && $meta) {
|
| 370 |
+
if ($meta->blog_id == $blog_id && (!$meta->post || $meta->post == $post_id) ) {
|
| 371 |
+
unlink($meta_pathname);
|
| 372 |
+
unlink($content_pathname);
|
| 373 |
+
}
|
| 374 |
+
} elseif ($meta->blog_id == $blog_id) {
|
| 375 |
+
unlink($meta_pathname);
|
| 376 |
+
unlink($content_pathname);
|
| 377 |
+
}
|
| 378 |
+
|
| 379 |
+
}
|
| 380 |
+
}
|
| 381 |
+
closedir($handle);
|
| 382 |
+
}
|
| 383 |
+
wp_cache_writers_exit();
|
| 384 |
+
return $post_id;
|
| 385 |
+
}
|
| 386 |
+
|
| 387 |
+
function wp_cache_microtime_diff($a, $b) {
|
| 388 |
+
list($a_dec, $a_sec) = explode(' ', $a);
|
| 389 |
+
list($b_dec, $b_sec) = explode(' ', $b);
|
| 390 |
+
return $b_sec - $a_sec + $b_dec - $a_dec;
|
| 391 |
+
}
|
| 392 |
+
|
| 393 |
+
function wp_cache_post_id() {
|
| 394 |
+
global $posts, $comment_post_ID, $post_ID;
|
| 395 |
+
// We try hard all options. More frequent first.
|
| 396 |
+
if ($post_ID > 0 ) return $post_ID;
|
| 397 |
+
if ($comment_post_ID > 0 ) return $comment_post_ID;
|
| 398 |
+
if (is_single() || is_page()) return $posts[0]->ID;
|
| 399 |
+
if ($_GET['p'] > 0) return $_GET['p'];
|
| 400 |
+
if ($_POST['p'] > 0) return $_POST['p'];
|
| 401 |
+
return 0;
|
| 402 |
+
}
|
| 403 |
+
|
| 404 |
+
if( !function_exists( 'mkpath' ) ) {
|
| 405 |
+
function mkpath($path) {
|
| 406 |
+
if(@mkdir($path, 0777) or file_exists($path)) return true;
|
| 407 |
+
return (mkpath(dirname($path)) and mkdir($path, 0777));
|
| 408 |
+
}
|
| 409 |
+
}
|
| 410 |
+
?>
|
wp-cache.php
ADDED
|
@@ -0,0 +1,704 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
Plugin Name: WP Super Cache
|
| 4 |
+
Plugin URI: http://ocaoimh.ie/wp-super-cache/
|
| 5 |
+
Description: Very fast cache module. It's composed of several modules, this plugin can configure and manage the whole system. Once enabled, you must <a href="options-general.php?page=wp-super-cache/wp-cache.php">enable the cache</a>. Based on WP-Cache by <a href="http://mnm.uib.es/gallir/">Ricardo Galli Granada</a>.
|
| 6 |
+
Version: 0.1
|
| 7 |
+
Author: Donncha O Caoimh
|
| 8 |
+
Author URI: http://ocaoimh.ie/
|
| 9 |
+
*/
|
| 10 |
+
/* Copyright 2005-2006 Ricardo Galli Granada (email : gallir@uib.es)
|
| 11 |
+
Some code copyright 2007 Donncha O Caoimh (http://ocaoimh.ie/)
|
| 12 |
+
|
| 13 |
+
This program is free software; you can redistribute it and/or modify
|
| 14 |
+
it under the terms of the GNU General Public License as published by
|
| 15 |
+
the Free Software Foundation; either version 2 of the License, or
|
| 16 |
+
(at your option) any later version.
|
| 17 |
+
|
| 18 |
+
This program is distributed in the hope that it will be useful,
|
| 19 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| 20 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| 21 |
+
GNU General Public License for more details.
|
| 22 |
+
|
| 23 |
+
You should have received a copy of the GNU General Public License
|
| 24 |
+
along with this program; if not, write to the Free Software
|
| 25 |
+
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
| 26 |
+
*/
|
| 27 |
+
|
| 28 |
+
$wp_cache_config_file = ABSPATH . 'wp-content/wp-cache-config.php';
|
| 29 |
+
|
| 30 |
+
if( !@include($wp_cache_config_file) ) {
|
| 31 |
+
get_wpcachehome();
|
| 32 |
+
$wp_cache_config_file_sample = WPCACHEHOME . 'wp-cache-config-sample.php';
|
| 33 |
+
@include($wp_cache_config_file_sample);
|
| 34 |
+
} else {
|
| 35 |
+
get_wpcachehome();
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
$wp_cache_config_file_sample = WPCACHEHOME . 'wp-cache-config-sample.php';
|
| 39 |
+
$wp_cache_link = ABSPATH . 'wp-content/advanced-cache.php';
|
| 40 |
+
$wp_cache_file = WPCACHEHOME . 'wp-cache-phase1.php';
|
| 41 |
+
|
| 42 |
+
include(WPCACHEHOME . 'wp-cache-base.php');
|
| 43 |
+
|
| 44 |
+
function get_wpcachehome() {
|
| 45 |
+
if( defined( 'WPCACHEHOME' ) == false ) {
|
| 46 |
+
if( is_file( dirname(__FILE__) . '/wp-cache-config-sample.php' ) ) {
|
| 47 |
+
define( 'WPCACHEHOME', trailingslashit( dirname(__FILE__) ) );
|
| 48 |
+
} elseif( is_file( dirname(__FILE__) . '/wp-super-cache/wp-cache-config-sample.php' ) ) {
|
| 49 |
+
define( 'WPCACHEHOME', dirname(__FILE__) . '/wp-super-cache/' );
|
| 50 |
+
} else {
|
| 51 |
+
die( 'Please create wp-content/wp-cache-config.php from wp-super-cache/wp-cache-config-sample.php' );
|
| 52 |
+
}
|
| 53 |
+
}
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
function wp_cache_add_pages() {
|
| 57 |
+
if( function_exists( 'is_site_admin' ) )
|
| 58 |
+
if( !is_site_admin() )
|
| 59 |
+
return;
|
| 60 |
+
|
| 61 |
+
add_options_page('WP Super Cache Manager', 'WP Super Cache', 'administrator', __FILE__, 'wp_cache_manager');
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
function wp_cache_manager() {
|
| 65 |
+
global $wp_cache_config_file, $valid_nonce, $supercachedir, $cache_path, $cache_enabled, $cache_compression, $super_cache_enabled;
|
| 66 |
+
|
| 67 |
+
if( function_exists( 'is_site_admin' ) )
|
| 68 |
+
if( !is_site_admin() )
|
| 69 |
+
return;
|
| 70 |
+
|
| 71 |
+
$supercachedir = $cache_path . 'supercache/' . preg_replace('/:.*$/', '', $_SERVER["HTTP_HOST"]);
|
| 72 |
+
if( get_option( 'gzipcompression' ) == 1 )
|
| 73 |
+
update_option( 'gzipcompression', 0 );
|
| 74 |
+
$valid_nonce = wp_verify_nonce($_REQUEST['_wpnonce'], 'wp-cache');
|
| 75 |
+
|
| 76 |
+
echo '<div class="wrap">';
|
| 77 |
+
echo "<h2>WP Super Cache Manager</h2>\n";
|
| 78 |
+
if(isset($_REQUEST['wp_restore_config']) && $valid_nonce) {
|
| 79 |
+
unlink($wp_cache_config_file);
|
| 80 |
+
echo '<strong>Configuration file changed, some values might be wrong. Load the page again from the "Options" menu to reset them.</strong>';
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
echo '<a name="main"></a><fieldset class="options"><legend>Main options</legend>';
|
| 84 |
+
if ( !wp_cache_check_link() ||
|
| 85 |
+
!wp_cache_verify_config_file() ||
|
| 86 |
+
!wp_cache_verify_cache_dir() ) {
|
| 87 |
+
echo "<br>Cannot continue... fix previous problems and retry.<br />";
|
| 88 |
+
echo "</fieldset></div>\n";
|
| 89 |
+
return;
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
if (!wp_cache_check_global_config()) {
|
| 93 |
+
echo "</fieldset></div>\n";
|
| 94 |
+
return;
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
echo "<h4>WP Super Cache is:</h4>";
|
| 98 |
+
if ( $valid_nonce ) {
|
| 99 |
+
if( isset( $_POST[ 'wp_cache_status' ] ) ) {
|
| 100 |
+
switch( $_POST[ 'wp_cache_status' ] ) {
|
| 101 |
+
case 'all':
|
| 102 |
+
wp_cache_enable();
|
| 103 |
+
break;
|
| 104 |
+
case 'none':
|
| 105 |
+
wp_cache_disable();
|
| 106 |
+
break;
|
| 107 |
+
case 'wpcache':
|
| 108 |
+
wp_cache_enable();
|
| 109 |
+
wp_super_cache_disable();
|
| 110 |
+
break;
|
| 111 |
+
}
|
| 112 |
+
}
|
| 113 |
+
if( isset( $_POST[ 'cache_compression' ] ) && $_POST[ 'cache_compression' ] != $cache_compression ) {
|
| 114 |
+
$cache_compression_changed = true;
|
| 115 |
+
$cache_compression = intval( $_POST[ 'cache_compression' ] );
|
| 116 |
+
wp_cache_replace_line('^ *\$cache_compression', "\$cache_compression = " . $cache_compression . ";", $wp_cache_config_file);
|
| 117 |
+
prune_super_cache( $cache_path, true );
|
| 118 |
+
delete_option( 'super_cache_meta' );
|
| 119 |
+
}
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
echo '<form name="wp_manager" action="'. $_SERVER["REQUEST_URI"] . '" method="post">';
|
| 123 |
+
?>
|
| 124 |
+
<label><input type='radio' name='wp_cache_status' value='all' <?php if( $cache_enabled == true && $super_cache_enabled == true ) { echo 'checked=checked'; } ?>> Enabled</label><br />
|
| 125 |
+
<label><input type='radio' name='wp_cache_status' value='none' <?php if( $cache_enabled == false ) { echo 'checked=checked'; } ?>> Disabled</label><br />
|
| 126 |
+
<label><input type='radio' name='wp_cache_status' value='wpcache' <?php if( $cache_enabled == true && $super_cache_enabled == false ) { echo 'checked=checked'; } ?>> Super Cache Disabled</label><br />
|
| 127 |
+
<p><strong>Super Cache compression:</strong>
|
| 128 |
+
<label><input type="radio" name="cache_compression" value="1" <?php if( $cache_compression ) { echo "checked=checked"; } ?>> Enabled</label>
|
| 129 |
+
<label><input type="radio" name="cache_compression" value="0" <?php if( !$cache_compression ) { echo "checked=checked"; } ?>> Disabled</label>
|
| 130 |
+
<p>Compression is disabled by default because some hosts have problems with compressed files. Switching this on and off clears the cache.</p>
|
| 131 |
+
<?php
|
| 132 |
+
if( isset( $cache_compression_changed ) && isset( $_POST[ 'cache_compression' ] ) && !$cache_compression ) {
|
| 133 |
+
?><p><strong>Super Cache compression is now disabled. You should remove or comment out the following rules in your .htaccess file:</strong></p>
|
| 134 |
+
<blockquote style='background-color: #ff6'><code>RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$<br />
|
| 135 |
+
RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$<br />
|
| 136 |
+
RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$<br />
|
| 137 |
+
RewriteCond %{HTTP:Accept-Encoding} gzip<br />
|
| 138 |
+
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz -f<br />
|
| 139 |
+
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz [L]</code>
|
| 140 |
+
</blockquote><?php
|
| 141 |
+
} elseif( isset( $cache_compression_changed ) && isset( $_POST[ 'cache_compression' ] ) && $cache_compression ) {
|
| 142 |
+
?><p><strong>Super Cache compression is now enabled. You must add or uncomment the following rules in your .htaccess file:</strong></p>
|
| 143 |
+
<blockquote style='background-color: #ff6'><code>RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$<br />
|
| 144 |
+
RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$<br />
|
| 145 |
+
RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$<br />
|
| 146 |
+
RewriteCond %{HTTP:Accept-Encoding} gzip<br />
|
| 147 |
+
RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz -f<br />
|
| 148 |
+
RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz [L]</code>
|
| 149 |
+
</blockquote><?php
|
| 150 |
+
}
|
| 151 |
+
echo '<div class="submit"><input type="submit"value="Update" /></div>';
|
| 152 |
+
wp_nonce_field('wp-cache');
|
| 153 |
+
echo "</form>\n";
|
| 154 |
+
|
| 155 |
+
wp_cache_edit_max_time();
|
| 156 |
+
echo '</fieldset>';
|
| 157 |
+
|
| 158 |
+
echo '<a name="files"></a><fieldset class="options"><legend>Accepted filenames, rejected URIs</legend>';
|
| 159 |
+
wp_cache_edit_rejected();
|
| 160 |
+
echo "<br />\n";
|
| 161 |
+
wp_cache_edit_accepted();
|
| 162 |
+
echo '</fieldset>';
|
| 163 |
+
|
| 164 |
+
wp_cache_edit_rejected_ua();
|
| 165 |
+
|
| 166 |
+
wp_cache_files();
|
| 167 |
+
|
| 168 |
+
wp_cache_restore();
|
| 169 |
+
|
| 170 |
+
ob_start();
|
| 171 |
+
do_cacheaction( 'cache_admin_page' );
|
| 172 |
+
$out = ob_get_contents();
|
| 173 |
+
ob_end_clean();
|
| 174 |
+
if( $out != '' ) {
|
| 175 |
+
echo '<fieldset class="options"><legend>Cache Plugins</legend>';
|
| 176 |
+
echo $out;
|
| 177 |
+
echo '</fieldset>';
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
echo "</div>\n";
|
| 181 |
+
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
+
function wp_cache_restore() {
|
| 185 |
+
echo '<fieldset class="options"><legend>Configuration messed up?</legend>';
|
| 186 |
+
echo '<form name="wp_restore" action="'. $_SERVER["REQUEST_URI"] . '" method="post">';
|
| 187 |
+
echo '<input type="hidden" name="wp_restore_config" />';
|
| 188 |
+
echo '<div class="submit"><input type="submit" id="deletepost" value="Restore default configuration" /></div>';
|
| 189 |
+
wp_nonce_field('wp-cache');
|
| 190 |
+
echo "</form>\n";
|
| 191 |
+
echo '</fieldset>';
|
| 192 |
+
|
| 193 |
+
}
|
| 194 |
+
|
| 195 |
+
function wp_cache_edit_max_time () {
|
| 196 |
+
global $super_cache_max_time, $cache_max_time, $wp_cache_config_file, $valid_nonce;
|
| 197 |
+
|
| 198 |
+
if( !isset( $super_cache_max_time ) )
|
| 199 |
+
$super_cache_max_time = 21600;
|
| 200 |
+
|
| 201 |
+
if(isset($_POST['wp_max_time']) && $valid_nonce) {
|
| 202 |
+
$max_time = (int)$_POST['wp_max_time'];
|
| 203 |
+
if ($max_time > 0) {
|
| 204 |
+
$cache_max_time = $max_time;
|
| 205 |
+
wp_cache_replace_line('^ *\$cache_max_time', "\$cache_max_time = $cache_max_time;", $wp_cache_config_file);
|
| 206 |
+
}
|
| 207 |
+
}
|
| 208 |
+
if(isset($_POST['super_cache_max_time']) && $valid_nonce) {
|
| 209 |
+
$max_time = (int)$_POST['super_cache_max_time'];
|
| 210 |
+
if ($max_time > 0) {
|
| 211 |
+
$super_cache_max_time = $max_time;
|
| 212 |
+
wp_cache_replace_line('^ *\$super_cache_max_time', "\$super_cache_max_time = $super_cache_max_time;", $wp_cache_config_file);
|
| 213 |
+
}
|
| 214 |
+
}
|
| 215 |
+
echo '<form name="wp_edit_max_time" action="'. $_SERVER["REQUEST_URI"] . '" method="post">';
|
| 216 |
+
echo '<label for="wp_max_time">Expire time (in seconds)</label>';
|
| 217 |
+
echo "<input type=\"text\" name=\"wp_max_time\" value=\"$cache_max_time\" /><br />";
|
| 218 |
+
echo '<label for="super_cache_max_time">Super Cache Expire time (in seconds)</label>';
|
| 219 |
+
echo "<input type=\"text\" name=\"super_cache_max_time\" value=\"$super_cache_max_time\" />";
|
| 220 |
+
echo '<div class="submit"><input type="submit" value="Change expiration" /></div>';
|
| 221 |
+
wp_nonce_field('wp-cache');
|
| 222 |
+
echo "</form>\n";
|
| 223 |
+
|
| 224 |
+
|
| 225 |
+
}
|
| 226 |
+
|
| 227 |
+
function wp_cache_sanitize_value($text, & $array) {
|
| 228 |
+
$text = wp_specialchars(strip_tags($text));
|
| 229 |
+
$array = preg_split("/[\s,]+/", chop($text));
|
| 230 |
+
$text = var_export($array, true);
|
| 231 |
+
$text = preg_replace('/[\s]+/', ' ', $text);
|
| 232 |
+
return $text;
|
| 233 |
+
}
|
| 234 |
+
|
| 235 |
+
function wp_cache_edit_rejected_ua() {
|
| 236 |
+
global $cache_rejected_user_agent, $wp_cache_config_file, $valid_nonce;
|
| 237 |
+
|
| 238 |
+
if (!function_exists('apache_request_headers')) return;
|
| 239 |
+
|
| 240 |
+
if(isset($_REQUEST['wp_rejected_user_agent']) && $valid_nonce) {
|
| 241 |
+
$text = wp_cache_sanitize_value($_REQUEST['wp_rejected_user_agent'], $cache_rejected_user_agent);
|
| 242 |
+
wp_cache_replace_line('^ *\$cache_rejected_user_agent', "\$cache_rejected_user_agent = $text;", $wp_cache_config_file);
|
| 243 |
+
}
|
| 244 |
+
|
| 245 |
+
|
| 246 |
+
echo '<a name="user-agents"></a><fieldset class="options"><legend>Rejected User Agents</legend>';
|
| 247 |
+
echo "<p>Strings in the HTTP 'User Agent' header that prevent WP-Cache from
|
| 248 |
+
caching bot, spiders, and crawlers' requests.
|
| 249 |
+
Note that cached files are still sent to these request if they already exists.</p>\n";
|
| 250 |
+
echo '<form name="wp_edit_rejected_user_agent" action="'. $_SERVER["REQUEST_URI"] . '" method="post">';
|
| 251 |
+
echo '<label for="wp_rejected_user_agent">Rejected UA strings</label>';
|
| 252 |
+
echo '<textarea name="wp_rejected_user_agent" cols="40" rows="4" style="width: 70%; font-size: 12px;" class="code">';
|
| 253 |
+
foreach ($cache_rejected_user_agent as $ua) {
|
| 254 |
+
echo wp_specialchars($ua) . "\n";
|
| 255 |
+
}
|
| 256 |
+
echo '</textarea> ';
|
| 257 |
+
echo '<div class="submit"><input type="submit" value="Save UA strings" /></div>';
|
| 258 |
+
wp_nonce_field('wp-cache');
|
| 259 |
+
echo '</form>';
|
| 260 |
+
echo "</fieldset>\n";
|
| 261 |
+
}
|
| 262 |
+
|
| 263 |
+
|
| 264 |
+
function wp_cache_edit_rejected() {
|
| 265 |
+
global $cache_acceptable_files, $cache_rejected_uri, $wp_cache_config_file, $valid_nonce;
|
| 266 |
+
|
| 267 |
+
if(isset($_REQUEST['wp_rejected_uri']) && $valid_nonce) {
|
| 268 |
+
$text = wp_cache_sanitize_value($_REQUEST['wp_rejected_uri'], $cache_rejected_uri);
|
| 269 |
+
wp_cache_replace_line('^ *\$cache_rejected_uri', "\$cache_rejected_uri = $text;", $wp_cache_config_file);
|
| 270 |
+
}
|
| 271 |
+
|
| 272 |
+
|
| 273 |
+
echo "<p>Add here strings (not a filename) that forces a page not to be cached. For example, if your URLs include year and you dont want to cache last year posts, it's enough to specify the year, i.e. '/2004/'. WP-Cache will search if that string is part of the URI and if so, it will no cache that page.</p>\n";
|
| 274 |
+
echo '<form name="wp_edit_rejected" action="'. $_SERVER["REQUEST_URI"] . '" method="post">';
|
| 275 |
+
echo '<label for="wp_rejected_uri">Rejected URIs</label>';
|
| 276 |
+
echo '<textarea name="wp_rejected_uri" cols="40" rows="4" style="width: 70%; font-size: 12px;" class="code">';
|
| 277 |
+
foreach ($cache_rejected_uri as $file) {
|
| 278 |
+
echo wp_specialchars($file) . "\n";
|
| 279 |
+
}
|
| 280 |
+
echo '</textarea> ';
|
| 281 |
+
echo '<div class="submit"><input type="submit" value="Save strings" /></div>';
|
| 282 |
+
wp_nonce_field('wp-cache');
|
| 283 |
+
echo "</form>\n";
|
| 284 |
+
}
|
| 285 |
+
|
| 286 |
+
function wp_cache_edit_accepted() {
|
| 287 |
+
global $cache_acceptable_files, $cache_rejected_uri, $wp_cache_config_file, $valid_nonce;
|
| 288 |
+
|
| 289 |
+
if(isset($_REQUEST['wp_accepted_files']) && $valid_nonce) {
|
| 290 |
+
$text = wp_cache_sanitize_value($_REQUEST['wp_accepted_files'], $cache_acceptable_files);
|
| 291 |
+
wp_cache_replace_line('^ *\$cache_acceptable_files', "\$cache_acceptable_files = $text;", $wp_cache_config_file);
|
| 292 |
+
}
|
| 293 |
+
|
| 294 |
+
|
| 295 |
+
echo "<p>Add here those filenames that can be cached, even if they match one of the rejected substring specified above.</p>\n";
|
| 296 |
+
echo '<form name="wp_edit_accepted" action="'. $_SERVER["REQUEST_URI"] . '" method="post">';
|
| 297 |
+
echo '<label for="wp_accepted_files">Accepted files</label>';
|
| 298 |
+
echo '<textarea name="wp_accepted_files" cols="40" rows="8" style="width: 70%; font-size: 12px;" class="code">';
|
| 299 |
+
foreach ($cache_acceptable_files as $file) {
|
| 300 |
+
echo wp_specialchars($file) . "\n";
|
| 301 |
+
}
|
| 302 |
+
echo '</textarea> ';
|
| 303 |
+
echo '<div class="submit"><input type="submit" value="Save files" /></div>';
|
| 304 |
+
wp_nonce_field('wp-cache');
|
| 305 |
+
echo "</form>\n";
|
| 306 |
+
}
|
| 307 |
+
|
| 308 |
+
function wp_cache_enable() {
|
| 309 |
+
global $wp_cache_config_file, $cache_enabled, $supercachedir;
|
| 310 |
+
|
| 311 |
+
if(get_settings('gzipcompression')) {
|
| 312 |
+
echo "<b>Error: GZIP compression is enabled, disable it if you want to enable wp-cache.</b><br /><br />";
|
| 313 |
+
return false;
|
| 314 |
+
}
|
| 315 |
+
if( wp_cache_replace_line('^ *\$cache_enabled', '$cache_enabled = true;', $wp_cache_config_file) ) {
|
| 316 |
+
$cache_enabled = true;
|
| 317 |
+
}
|
| 318 |
+
wp_super_cache_enable();
|
| 319 |
+
}
|
| 320 |
+
|
| 321 |
+
function wp_cache_disable() {
|
| 322 |
+
global $wp_cache_config_file, $cache_enabled, $supercachedir, $cache_path;
|
| 323 |
+
|
| 324 |
+
if (wp_cache_replace_line('^ *\$cache_enabled', '$cache_enabled = false;', $wp_cache_config_file)) {
|
| 325 |
+
$cache_enabled = false;
|
| 326 |
+
}
|
| 327 |
+
wp_super_cache_disable();
|
| 328 |
+
}
|
| 329 |
+
function wp_super_cache_enable() {
|
| 330 |
+
global $supercachedir, $wp_cache_config_file, $super_cache_enabled;
|
| 331 |
+
|
| 332 |
+
if( is_dir( $supercachedir . ".disabled" ) )
|
| 333 |
+
rename( $supercachedir . ".disabled", $supercachedir );
|
| 334 |
+
wp_cache_replace_line('^ *\$super_cache_enabled', '$super_cache_enabled = true;', $wp_cache_config_file);
|
| 335 |
+
$super_cache_enabled = true;
|
| 336 |
+
}
|
| 337 |
+
|
| 338 |
+
function wp_super_cache_disable() {
|
| 339 |
+
global $supercachedir, $wp_cache_config_file, $super_cache_enabled;
|
| 340 |
+
|
| 341 |
+
if( is_dir( $supercachedir ) )
|
| 342 |
+
rename( $supercachedir, $supercachedir . ".disabled" );
|
| 343 |
+
wp_cache_replace_line('^ *\$super_cache_enabled', '$super_cache_enabled = false;', $wp_cache_config_file);
|
| 344 |
+
$super_cache_enabled = false;
|
| 345 |
+
}
|
| 346 |
+
|
| 347 |
+
function wp_cache_is_enabled() {
|
| 348 |
+
global $wp_cache_config_file;
|
| 349 |
+
|
| 350 |
+
if(get_settings('gzipcompression')) {
|
| 351 |
+
echo "<b>Warning</b>: GZIP compression is enabled in Wordpress, wp-cache will be bypassed until you disable gzip compression.<br />";
|
| 352 |
+
return false;
|
| 353 |
+
}
|
| 354 |
+
$lines = file($wp_cache_config_file);
|
| 355 |
+
foreach($lines as $line) {
|
| 356 |
+
if (preg_match('/^ *\$cache_enabled *= *true *;/', $line))
|
| 357 |
+
return true;
|
| 358 |
+
}
|
| 359 |
+
return false;
|
| 360 |
+
}
|
| 361 |
+
|
| 362 |
+
|
| 363 |
+
function wp_cache_replace_line($old, $new, $my_file) {
|
| 364 |
+
if (!is_writable($my_file)) {
|
| 365 |
+
echo "Error: file $my_file is not writable.<br />\n";
|
| 366 |
+
return false;
|
| 367 |
+
}
|
| 368 |
+
$found = false;
|
| 369 |
+
$lines = file($my_file);
|
| 370 |
+
foreach($lines as $line) {
|
| 371 |
+
if ( preg_match("/$old/", $line)) {
|
| 372 |
+
$found = true;
|
| 373 |
+
break;
|
| 374 |
+
}
|
| 375 |
+
}
|
| 376 |
+
if ($found) {
|
| 377 |
+
$fd = fopen($my_file, 'w');
|
| 378 |
+
foreach($lines as $line) {
|
| 379 |
+
if ( !preg_match("/$old/", $line))
|
| 380 |
+
fputs($fd, $line);
|
| 381 |
+
else {
|
| 382 |
+
fputs($fd, "$new //Added by WP-Cache Manager\n");
|
| 383 |
+
}
|
| 384 |
+
}
|
| 385 |
+
fclose($fd);
|
| 386 |
+
return true;
|
| 387 |
+
}
|
| 388 |
+
$fd = fopen($my_file, 'w');
|
| 389 |
+
$done = false;
|
| 390 |
+
foreach($lines as $line) {
|
| 391 |
+
if ( $done || !preg_match('/^define|\$|\?>/', $line))
|
| 392 |
+
fputs($fd, $line);
|
| 393 |
+
else {
|
| 394 |
+
fputs($fd, "$new //Added by WP-Cache Manager\n");
|
| 395 |
+
fputs($fd, $line);
|
| 396 |
+
$done = true;
|
| 397 |
+
}
|
| 398 |
+
}
|
| 399 |
+
fclose($fd);
|
| 400 |
+
return true;
|
| 401 |
+
/*
|
| 402 |
+
copy($my_file, $my_file . "-prev");
|
| 403 |
+
rename($my_file . '-new', $my_file);
|
| 404 |
+
*/
|
| 405 |
+
}
|
| 406 |
+
|
| 407 |
+
function wp_cache_verify_cache_dir() {
|
| 408 |
+
global $cache_path;
|
| 409 |
+
|
| 410 |
+
$dir = dirname($cache_path);
|
| 411 |
+
if ( !file_exists($cache_path) ) {
|
| 412 |
+
if ( !is_writable( $dir ) || !($dir = mkdir( $cache_path ) ) ) {
|
| 413 |
+
echo "<b>Error:</b> Your cache directory (<b>$cache_path</b>) did not exist and couldn't be created by the web server. <br /> Check $dir permissions.";
|
| 414 |
+
return false;
|
| 415 |
+
}
|
| 416 |
+
}
|
| 417 |
+
if ( !is_writable($cache_path)) {
|
| 418 |
+
echo "<b>Error:</b> Your cache directory (<b>$cache_path</b>) or <b>$dir</b> need to be writable for this plugin to work. <br /> Double-check it.";
|
| 419 |
+
return false;
|
| 420 |
+
}
|
| 421 |
+
|
| 422 |
+
if ( '/' != substr($cache_path, -1)) {
|
| 423 |
+
$cache_path .= '/';
|
| 424 |
+
}
|
| 425 |
+
|
| 426 |
+
@mkdir( $cache_path . 'meta/' );
|
| 427 |
+
|
| 428 |
+
return true;
|
| 429 |
+
}
|
| 430 |
+
|
| 431 |
+
function wp_cache_verify_config_file() {
|
| 432 |
+
global $wp_cache_config_file, $wp_cache_config_file_sample;
|
| 433 |
+
|
| 434 |
+
$new = false;
|
| 435 |
+
$dir = dirname($wp_cache_config_file);
|
| 436 |
+
|
| 437 |
+
if ( !is_writable($dir)) {
|
| 438 |
+
echo "<b>Error:</b> wp-content directory (<b>$dir</b>) is not writable by the Web server.<br />Check its permissions.";
|
| 439 |
+
return false;
|
| 440 |
+
}
|
| 441 |
+
if ( !file_exists($wp_cache_config_file) ) {
|
| 442 |
+
if ( !file_exists($wp_cache_config_file_sample) ) {
|
| 443 |
+
echo "<b>Error:</b> Sample WP-Cache config file (<b>$wp_cache_config_file_sample</b>) does not exist.<br />Verify you installation.";
|
| 444 |
+
return false;
|
| 445 |
+
}
|
| 446 |
+
copy($wp_cache_config_file_sample, $wp_cache_config_file);
|
| 447 |
+
if( is_file( dirname(__FILE__) . '/wp-cache-config-sample.php' ) ) {
|
| 448 |
+
wp_cache_replace_line('WPCACHEHOME', "define( 'WPCACHEHOME', " . str_replace( ABSPATH, 'ABSPATH . "', dirname(__FILE__) ) . "/\" );", $wp_cache_config_file);
|
| 449 |
+
} elseif( is_file( dirname(__FILE__) . '/wp-super-cache/wp-cache-config-sample.php' ) ) {
|
| 450 |
+
wp_cache_replace_line('WPCACHEHOME', "define( 'WPCACHEHOME', " . str_replace( ABSPATH, 'ABSPATH . "', dirname(__FILE__) ) . "/wp-super-cache/\" );", $wp_cache_config_file);
|
| 451 |
+
}
|
| 452 |
+
$new = true;
|
| 453 |
+
}
|
| 454 |
+
if ( !is_writable($wp_cache_config_file)) {
|
| 455 |
+
echo "<b>Error:</b> Your WP-Cache config file (<b>$wp_cache_config_file</b>) is not writable by the Web server.<br />Check its permissions.";
|
| 456 |
+
return false;
|
| 457 |
+
}
|
| 458 |
+
require($wp_cache_config_file);
|
| 459 |
+
return true;
|
| 460 |
+
}
|
| 461 |
+
|
| 462 |
+
function wp_cache_check_link() {
|
| 463 |
+
global $wp_cache_link, $wp_cache_file;
|
| 464 |
+
|
| 465 |
+
if ( basename(@readlink($wp_cache_link)) != basename($wp_cache_file)) {
|
| 466 |
+
@unlink($wp_cache_link);
|
| 467 |
+
if (!@symlink ($wp_cache_file, $wp_cache_link)) {
|
| 468 |
+
echo "<code>advanced-cache.php</code> link does not exist<br />";
|
| 469 |
+
echo "Create it by executing: <br /><code>ln -s $wp_cache_file $wp_cache_link</code><br /> in your server<br />";
|
| 470 |
+
return false;
|
| 471 |
+
}
|
| 472 |
+
}
|
| 473 |
+
return true;
|
| 474 |
+
}
|
| 475 |
+
|
| 476 |
+
function wp_cache_check_global_config() {
|
| 477 |
+
|
| 478 |
+
$global = ABSPATH . 'wp-config.php';
|
| 479 |
+
|
| 480 |
+
$lines = file($global);
|
| 481 |
+
foreach($lines as $line) {
|
| 482 |
+
if (preg_match('/^ *define *\( *\'WP_CACHE\' *, *true *\) *;/', $line)) {
|
| 483 |
+
return true;
|
| 484 |
+
}
|
| 485 |
+
}
|
| 486 |
+
$line = 'define(\'WP_CACHE\', true);';
|
| 487 |
+
if (!is_writable($global) || !wp_cache_replace_line('define *\( *\'WP_CACHE\'', $line, $global) ) {
|
| 488 |
+
echo "<b>Error: WP_CACHE is not enabled</b> in your <code>wp-config.php</code> file and I couldn't modified it.<br />";
|
| 489 |
+
echo "Edit <code>$global</code> and add the following line: <br /><code>define('WP_CACHE', true);</code><br />Otherwise, <b>WP-Cache will not be executed</b> by Wordpress core. <br />";
|
| 490 |
+
return false;
|
| 491 |
+
}
|
| 492 |
+
return true;
|
| 493 |
+
}
|
| 494 |
+
|
| 495 |
+
function wp_cache_files() {
|
| 496 |
+
global $cache_path, $file_prefix, $cache_max_time, $super_cache_max_time, $valid_nonce, $supercachedir;
|
| 497 |
+
|
| 498 |
+
if ( '/' != substr($cache_path, -1)) {
|
| 499 |
+
$cache_path .= '/';
|
| 500 |
+
}
|
| 501 |
+
|
| 502 |
+
if ( $valid_nonce ) {
|
| 503 |
+
if(isset($_REQUEST['wp_delete_cache'])) {
|
| 504 |
+
wp_cache_clean_cache($file_prefix);
|
| 505 |
+
}
|
| 506 |
+
if(isset($_REQUEST['wp_delete_cache_file'])) {
|
| 507 |
+
wp_cache_clean_cache($_REQUEST['wp_delete_cache_file']);
|
| 508 |
+
}
|
| 509 |
+
if(isset($_REQUEST['wp_delete_expired'])) {
|
| 510 |
+
wp_cache_clean_expired($file_prefix);
|
| 511 |
+
}
|
| 512 |
+
}
|
| 513 |
+
if(isset($_REQUEST['wp_list_cache'])) {
|
| 514 |
+
$list_files = true;
|
| 515 |
+
$list_mess = "Update list";
|
| 516 |
+
} else
|
| 517 |
+
$list_mess = "List files";
|
| 518 |
+
|
| 519 |
+
echo '<a name="list"></a><fieldset class="options"><legend>Cache contents</legend>';
|
| 520 |
+
echo '<form name="wp_cache_content_list" action="'. $_SERVER["REQUEST_URI"] . '#list" method="post">';
|
| 521 |
+
echo '<input type="hidden" name="wp_list_cache" />';
|
| 522 |
+
echo '<div class="submit"><input type="submit" value="'.$list_mess.'" /></div>';
|
| 523 |
+
echo "</form>\n";
|
| 524 |
+
|
| 525 |
+
$count = 0;
|
| 526 |
+
$expired = 0;
|
| 527 |
+
$now = time();
|
| 528 |
+
if ( ($handle = opendir( $cache_path . 'meta/' )) ) {
|
| 529 |
+
if ($list_files) echo "<table cellspacing=\"0\" cellpadding=\"5\">";
|
| 530 |
+
while ( false !== ($file = readdir($handle))) {
|
| 531 |
+
if ( preg_match("/^$file_prefix.*\.meta/", $file) ) {
|
| 532 |
+
$this_expired = false;
|
| 533 |
+
$content_file = preg_replace("/meta$/", "html", $file);
|
| 534 |
+
$mtime = filemtime($cache_path . 'meta/' . $file);
|
| 535 |
+
if ( ! ($fsize = @filesize($cache_path.$content_file)) )
|
| 536 |
+
continue; // .meta does not exists
|
| 537 |
+
$fsize = intval($fsize/1024);
|
| 538 |
+
$age = $now - $mtime;
|
| 539 |
+
if ( $age > $cache_max_time) {
|
| 540 |
+
$expired++;
|
| 541 |
+
$this_expired = true;
|
| 542 |
+
}
|
| 543 |
+
$count++;
|
| 544 |
+
if ($list_files) {
|
| 545 |
+
$meta = new CacheMeta;
|
| 546 |
+
$meta = unserialize(file_get_contents($cache_path . 'meta/' . $file));
|
| 547 |
+
echo $flip ? '<tr style="background: #EAEAEA;">' : '<tr>';
|
| 548 |
+
$flip = !$flip;
|
| 549 |
+
echo '<td><a href="http://' . $meta->uri . '" target="_blank" >';
|
| 550 |
+
echo $meta->uri . "</a></td>";
|
| 551 |
+
if ($this_expired) echo "<td><span style='color:red'>$age secs</span></td>";
|
| 552 |
+
else echo "<td>$age secs</td>";
|
| 553 |
+
echo "<td>$fsize KB</td>";
|
| 554 |
+
echo '<td><form name="wp_delete_cache_file" action="'. $_SERVER["REQUEST_URI"] . '#list" method="post">';
|
| 555 |
+
echo '<input type="hidden" name="wp_list_cache" />';
|
| 556 |
+
echo '<input type="hidden" name="wp_delete_cache_file" value="'.preg_replace("/^(.*)\.meta$/", "$1", $file).'" />';
|
| 557 |
+
echo '<div class="submit"><input id="deletepost" type="submit" value="Remove" /></div>';
|
| 558 |
+
wp_nonce_field('wp-cache');
|
| 559 |
+
echo "</form></td></tr>\n";
|
| 560 |
+
}
|
| 561 |
+
}
|
| 562 |
+
}
|
| 563 |
+
closedir($handle);
|
| 564 |
+
if ($list_files) echo "</table>";
|
| 565 |
+
}
|
| 566 |
+
$sizes = get_option( 'super_cache_meta' );
|
| 567 |
+
if( !$sizes )
|
| 568 |
+
$sizes = array( 'expired' => 0, 'cached' => 0, 'ts' => 0 );
|
| 569 |
+
|
| 570 |
+
$now = time();
|
| 571 |
+
if( $_POST[ 'super_cache_stats' ] == 1 || $sizes[ 'cached' ] == 0 || $sizes[ 'ts' ] + 3600 <= $now ) {
|
| 572 |
+
$sizes = array( 'expired' => 0, 'cached' => 0, 'ts' => 0 );
|
| 573 |
+
|
| 574 |
+
if (is_dir($supercachedir)) {
|
| 575 |
+
$entries = glob($supercachedir. '/*');
|
| 576 |
+
foreach ($entries as $entry) {
|
| 577 |
+
if ($entry != '.' && $entry != '..') {
|
| 578 |
+
$sizes = wpsc_dirsize( $entry, $sizes );
|
| 579 |
+
}
|
| 580 |
+
}
|
| 581 |
+
} else {
|
| 582 |
+
if(is_file($supercachedir) && filemtime( $supercachedir ) + $super_cache_max_time <= $now )
|
| 583 |
+
$sizes[ 'expired' ] ++;
|
| 584 |
+
}
|
| 585 |
+
$sizes[ 'ts' ] = time();
|
| 586 |
+
update_option( 'super_cache_meta', $sizes );
|
| 587 |
+
}
|
| 588 |
+
echo "<p><strong>WP-Cache</strong></p>";
|
| 589 |
+
echo "<ul><li>$count cached pages</li>";
|
| 590 |
+
echo "<li>$expired expired pages</li></ul>";
|
| 591 |
+
echo "<p><strong>WP-Super-Cache</strong></p>";
|
| 592 |
+
echo "<ul><li>" . intval($sizes['cached']/2) . " cached pages</li>";
|
| 593 |
+
$age = intval(($now - $sizes['ts'])/60);
|
| 594 |
+
echo "<li>" . intval($sizes['expired']/2) . " expired pages. (Generated $age minutes ago. Refresh in " . (60 - $age) . " minutes. )</li></ul>";
|
| 595 |
+
|
| 596 |
+
echo '<form name="wp_cache_content_expired" action="'. $_SERVER["REQUEST_URI"] . '#list" method="post">';
|
| 597 |
+
echo '<input type="hidden" name="wp_delete_expired" />';
|
| 598 |
+
echo '<div class="submit"><input type="submit" value="Delete expired" /></div>';
|
| 599 |
+
wp_nonce_field('wp-cache');
|
| 600 |
+
echo "</form>\n";
|
| 601 |
+
|
| 602 |
+
|
| 603 |
+
echo '<form name="wp_cache_content_delete" action="'. $_SERVER["REQUEST_URI"] . '#list" method="post">';
|
| 604 |
+
echo '<input type="hidden" name="wp_delete_cache" />';
|
| 605 |
+
echo '<div class="submit"><input id="deletepost" type="submit" value="Delete cache" /></div>';
|
| 606 |
+
|
| 607 |
+
wp_nonce_field('wp-cache');
|
| 608 |
+
echo "</form>\n";
|
| 609 |
+
|
| 610 |
+
echo '<form name="wp_super_cache_stats" action="'. $_SERVER["REQUEST_URI"] . '" method="post">';
|
| 611 |
+
echo '<input type="hidden" name="super_cache_stats" value="1" />';
|
| 612 |
+
echo '<div class="submit"><input type="submit" value="Regenerate Super Cache Stats" /></div>';
|
| 613 |
+
wp_nonce_field('wp-cache');
|
| 614 |
+
echo "</form>\n";
|
| 615 |
+
|
| 616 |
+
echo '</fieldset>';
|
| 617 |
+
}
|
| 618 |
+
|
| 619 |
+
function wpsc_dirsize($directory, $sizes) {
|
| 620 |
+
global $super_cache_max_time;
|
| 621 |
+
$now = time();
|
| 622 |
+
|
| 623 |
+
if (is_dir($directory)) {
|
| 624 |
+
$entries = glob($directory. '/*');
|
| 625 |
+
foreach ($entries as $entry) {
|
| 626 |
+
if ($entry != '.' && $entry != '..') {
|
| 627 |
+
$sizes = wpsc_dirsize($entry, $sizes);
|
| 628 |
+
}
|
| 629 |
+
}
|
| 630 |
+
} else {
|
| 631 |
+
if(is_file($directory) ) {
|
| 632 |
+
if( filemtime( $directory ) + $super_cache_max_time <= $now ) {
|
| 633 |
+
$sizes[ 'expired' ]+=1;
|
| 634 |
+
} else {
|
| 635 |
+
$sizes[ 'cached' ]+=1;
|
| 636 |
+
}
|
| 637 |
+
}
|
| 638 |
+
}
|
| 639 |
+
return $sizes;
|
| 640 |
+
}
|
| 641 |
+
|
| 642 |
+
|
| 643 |
+
function wp_cache_clean_cache($file_prefix) {
|
| 644 |
+
global $cache_path, $supercachedir;
|
| 645 |
+
|
| 646 |
+
// If phase2 was compiled, use its function to avoid race-conditions
|
| 647 |
+
if(function_exists('wp_cache_phase2_clean_cache')) {
|
| 648 |
+
if( is_dir( $supercachedir ) ) {
|
| 649 |
+
prune_super_cache( $supercachedir, true );
|
| 650 |
+
} elseif( is_dir( $supercachedir . '.disabled' ) ) {
|
| 651 |
+
prune_super_cache( $supercachedir . '.disabled', true );
|
| 652 |
+
}
|
| 653 |
+
prune_super_cache( $cache_path, true );
|
| 654 |
+
$_POST[ 'super_cache_stats' ] = 1; // regenerate super cache stats;
|
| 655 |
+
return wp_cache_phase2_clean_cache($file_prefix);
|
| 656 |
+
}
|
| 657 |
+
|
| 658 |
+
$expr = "/^$file_prefix/";
|
| 659 |
+
if ( ($handle = opendir( $cache_path )) ) {
|
| 660 |
+
while ( false !== ($file = readdir($handle))) {
|
| 661 |
+
if ( preg_match($expr, $file) ) {
|
| 662 |
+
unlink($cache_path . $file);
|
| 663 |
+
unlink($cache_path . 'meta/' . str_replace( '.html', '.term', $file ) );
|
| 664 |
+
}
|
| 665 |
+
}
|
| 666 |
+
closedir($handle);
|
| 667 |
+
}
|
| 668 |
+
}
|
| 669 |
+
|
| 670 |
+
function wp_cache_clean_expired($file_prefix) {
|
| 671 |
+
global $cache_path, $cache_max_time;
|
| 672 |
+
|
| 673 |
+
// If phase2 was compiled, use its function to avoid race-conditions
|
| 674 |
+
if(function_exists('wp_cache_phase2_clean_expired')) {
|
| 675 |
+
$dir = $cache_path . 'supercache/' . preg_replace('/:.*$/', '', $_SERVER["HTTP_HOST"]);
|
| 676 |
+
if( is_dir( $dir ) ) {
|
| 677 |
+
prune_super_cache( $dir );
|
| 678 |
+
} elseif( is_dir( $dir . '.disabled' ) ) {
|
| 679 |
+
prune_super_cache( $dir . '.disabled' );
|
| 680 |
+
}
|
| 681 |
+
$_POST[ 'super_cache_stats' ] = 1; // regenerate super cache stats;
|
| 682 |
+
return wp_cache_phase2_clean_expired($file_prefix);
|
| 683 |
+
}
|
| 684 |
+
|
| 685 |
+
$expr = "/^$file_prefix/";
|
| 686 |
+
$now = time();
|
| 687 |
+
if ( ($handle = opendir( $cache_path )) ) {
|
| 688 |
+
while ( false !== ($file = readdir($handle))) {
|
| 689 |
+
if ( preg_match($expr, $file) &&
|
| 690 |
+
(filemtime($cache_path . $file) + $cache_max_time) <= $now) {
|
| 691 |
+
unlink($cache_path . $file);
|
| 692 |
+
unlink($cache_path . 'meta/' . str_replace( '.html', '.term', $file ) );
|
| 693 |
+
}
|
| 694 |
+
}
|
| 695 |
+
closedir($handle);
|
| 696 |
+
}
|
| 697 |
+
}
|
| 698 |
+
|
| 699 |
+
add_action('admin_menu', 'wp_cache_add_pages');
|
| 700 |
+
|
| 701 |
+
if( get_option( 'gzipcompression' ) )
|
| 702 |
+
update_option( 'gzipcompression', 0 );
|
| 703 |
+
|
| 704 |
+
?>
|
