WP Super Cache - Version 0.4

Version Description

Download this release

Release Info

Developer donncha
Plugin Icon 128x128 WP Super Cache
Version 0.4
Comparing to
See all releases

Code changes from version 0.3.1 to 0.4

Files changed (6) hide show
  1. Changelog.txt +124 -0
  2. plugins/searchengine.php +2 -2
  3. readme.txt +23 -56
  4. wp-cache-phase1.php +2 -5
  5. wp-cache-phase2.php +47 -41
  6. wp-cache.php +160 -54
Changelog.txt CHANGED
@@ -1,3 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  2007-11-07 15:27 donncha
2
 
3
  * readme.txt: Bump version to 0.3.1 (getting to 1.0 far too
1
+ 2007-11-12 15:23 donncha
2
+
3
+ * readme.txt, wp-cache.php: Bump version
4
+ Update readme docs
5
+ Add options page for wpmu site admins
6
+
7
+ 2007-11-12 11:32 donncha
8
+
9
+ * wp-cache.php: Check if cache config file is out of date
10
+
11
+ 2007-11-12 11:14 donncha
12
+
13
+ * wp-cache-phase2.php, wp-cache.php: Hide some warning messages
14
+ Don't super cache $_GET requests
15
+ Use wp_mkdir_p() instead of mkpath()
16
+ Don't delete meta, supercache or .htaccess
17
+
18
+ 2007-11-11 10:05 donncha
19
+
20
+ * wp-cache.php: Don't want to check for .gz files twice!
21
+
22
+ 2007-11-11 08:06 donncha
23
+
24
+ * wp-cache.php: Added 'comment moderation' message when blog locked
25
+ down.
26
+ Formatting changes
27
+ Use 'manage_options' instead of administrator because viper
28
+ changed his role names :)
29
+
30
+ 2007-11-11 01:13 donncha
31
+
32
+ * wp-cache.php: If .htaccess updating fails, inform the user
33
+
34
+ 2007-11-11 00:20 donncha
35
+
36
+ * wp-cache-phase2.php, wp-cache.php: Added "Lockdown" function so
37
+ static files won't be deleted by comments
38
+ Minor changes to admin page formatting
39
+ get_settings to get_option
40
+
41
+ 2007-11-10 21:06 donncha
42
+
43
+ * wp-cache.php: Spell out radio boxes a bit more.
44
+ Modified .htaccess rules so search pages aren't served from super
45
+ cache
46
+ Actually insert_with_markers instead of echoing the command!
47
+ Tell user rules have been updated
48
+ Disable super cache *before* renaming directory. Sleep for a
49
+ second before
50
+ deleting to allow other processes to finish
51
+
52
+ 2007-11-10 20:03 donncha
53
+
54
+ * wp-cache-phase2.php: Make sure the .htaccess isn't deleted
55
+
56
+ 2007-11-10 09:28 donncha
57
+
58
+ * wp-cache-phase2.php: Don't remove super-cache file until comment
59
+ is approved
60
+
61
+ 2007-11-10 07:19 donncha
62
+
63
+ * wp-cache.php: Check that WP_CACHE is defined before checking for
64
+ do_cacheaction.
65
+ Better instructions for verifying a new install
66
+
67
+ 2007-11-09 21:33 donncha
68
+
69
+ * wp-cache.php: Define WPCACHEHOME properly, thanks tummbler for
70
+ testing!
71
+
72
+ 2007-11-09 17:09 donncha
73
+
74
+ * wp-cache-phase2.php: Don't super-cache WordPress searches. May
75
+ need to extend that to any GET activity
76
+
77
+ 2007-11-09 15:01 donncha
78
+
79
+ * wp-cache-phase2.php: Change preg_match delimiter so slashes work
80
+ again
81
+
82
+ 2007-11-09 14:41 donncha
83
+
84
+ * readme.txt: Updated documentation
85
+
86
+ 2007-11-09 14:27 donncha
87
+
88
+ * wp-cache.php: Use get_mod_rewrite() to detect if that module is
89
+ loaded
90
+ Automatically populate the .htaccess file if it's writable
91
+ Add gzip encoding rules to the cache dir, props Dennis @
92
+ http://allmybrain.com/2007/11/08/making-wp-super-cache-gzip-compression-work/
93
+ Replace Windows folder deliminator, "\" with "/" in WPCACHEHOME,
94
+ props Computer Guru @
95
+ http://neosmart.net/blog/2007/getting-wordpress-super-cache-to-run-on-a-windows-iis-or-apache-server/
96
+
97
+ 2007-11-09 01:19 donncha
98
+
99
+ * wp-cache-phase2.php: Move is_feed() check earlier.
100
+ Check that mkpath() path is in $cache_path
101
+
102
+ 2007-11-08 21:57 donncha
103
+
104
+ * wp-cache.php: Single quote ABSPATH
105
+ Check advanced-cache.php for version, remove if necessary, fixed
106
+ create conditions
107
+
108
+ 2007-11-08 21:55 donncha
109
+
110
+ * wp-cache-phase1.php: realpath() two filenames
111
+
112
+ 2007-11-08 21:53 donncha
113
+
114
+ * readme.txt: Fix subdirectory .htaccess rules, props Computer Guru
115
+
116
+ 2007-11-08 21:51 donncha
117
+
118
+ * plugins/searchengine.php: Hide setcookie errors
119
+ Return correct string
120
+
121
+ 2007-11-07 15:38 donncha
122
+
123
+ * Changelog.txt: Added Changelog.txt
124
+
125
  2007-11-07 15:27 donncha
126
 
127
  * readme.txt: Bump version to 0.3.1 (getting to 1.0 far too
plugins/searchengine.php CHANGED
@@ -22,7 +22,7 @@ function wp_supercache_searchengine( $string ) {
22
  }
23
  if( $se ) {
24
  $string = 'searchengine';
25
- setcookie( '7a1254cba80da02d5478d91cfd0a873a', 1, time()+3600, '/' );
26
  }
27
  }
28
  }
@@ -38,7 +38,7 @@ function searchenginesupercache( $user_info ) {
38
  } else {
39
  return false;
40
  }
41
- return $string;
42
  }
43
 
44
  function searchengine_phase2_actions() {
22
  }
23
  if( $se ) {
24
  $string = 'searchengine';
25
+ @setcookie( '7a1254cba80da02d5478d91cfd0a873a', 1, time()+3600, '/' );
26
  }
27
  }
28
  }
38
  } else {
39
  return false;
40
  }
41
+ return $user_info;
42
  }
43
 
44
  function searchengine_phase2_actions() {
readme.txt CHANGED
@@ -2,7 +2,7 @@
2
  Contributors: donncha
3
  Tags: performance,caching,wp-cache
4
  Tested up to: 2.3.1
5
- Stable tag: 0.3.1
6
 
7
  A modification of WP-Cache that produces static html files.
8
 
@@ -10,12 +10,19 @@ A modification of WP-Cache that produces static html files.
10
  A modification of WP-Cache that produces static html files. After a html file
11
  is generated your webserver will serve that file instead of processing the
12
  comparatively heavier and more expensive WordPress PHP scripts.
13
- It will only cache and serve files to users who are not logged in, who
14
- have not left a comment on your blog, or who have viewed a password protected
15
- post. That still probably leave 90% of your visitors who will benefit. The users
16
- mentioned above will also benefit because your server won't be as busy as before.
17
- This script should help your server cope with a front page appearance on digg.com
18
- or other social networking site.
 
 
 
 
 
 
 
19
 
20
  This plugin is a modified version of the WP-Cache 2 plugin by Ricardo Galli Granada.
21
  His plugin is still available. We're standing on the shoulders of giants and benefiting
@@ -25,66 +32,22 @@ See the following URLs for more info on WP-Cache 2
25
  1. http://mnm.uib.es/gallir/wp-cache-2/
26
  2. http://wordpress.org/extend/plugins/wp-cache/
27
 
28
- A classic method of preparing an underpowered site for a Digg frontpage appearance
29
- or a Slashdotting has been to manually save copies of dynamically generated pages,
30
- and place them in directories that match the permalinks structure.
31
-
32
- This method of performance enhancement does help servers handle a higher load
33
- without crashing, but is only effective when an oncoming rush of traffic can be
34
- anticipated.
35
-
36
- WP-Cache alone, while helpful, is not adequate in many cases, so this modification
37
- was created to effectively mimic the manual page caching method, but to handle it
38
- in an automated fashion.
39
-
40
- Original WP-Cache by Ricardo Galli Granada, http://mnm.uib.es/gallir/
41
- WP Super Cache by Donncha O Caoimh, http://ocaoimh.ie/
42
 
43
  == Installation ==
44
- 1. You must have fancy permalinks enabled for this to work.
45
- 2. If you have WP-Cache installed already, please disable it. Edit wp-config.php and make sure the WP_CACHE define is deleted, and remove the file wp-content/advanced-cache.php. These will be recreated when you install this plugin.
46
  3. Upload this directory to your plugins directory. It will create a 'wp-content/plugins/wp-super-cache/' directory.
47
  4. If you are using WordPress MU you will need to install this in 'wp-content/mu-plugins/wp-super-cache/' and the file wp-cache.php must be copied into the mu-plugins directory.
48
  5. WordPress users should go to their Plugins page and activate "WP Super Cache".
49
  6. Now go to Options->WP Super Cache and enable caching. If you see an error message or a blank screen you may need to fix it. See the "FAQ" section later in this readme for instructions.
50
- 7. Edit the .htaccess file in your root directory and add the following code:
51
-
52
- RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
53
- RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
54
- RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
55
- RewriteCond %{HTTP:Accept-Encoding} gzip
56
- RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz -f
57
- RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz [L]
58
-
59
- RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
60
- RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
61
- RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
62
- RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html -f
63
- RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html [L]
64
-
65
- That code must be inserted above the standard WordPress rewrite rules.
66
- If your blog isn't located at the root of your server, you must add that directory
67
- to the rules. For example, if your blog is in the directory "/blog/":
68
-
69
- RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
70
- RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
71
- RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
72
- RewriteCond %{HTTP:Accept-Encoding} gzip
73
- RewriteCond %{DOCUMENT_ROOT}/blog/wp-content/cache/supercache/%{HTTP_HOST}/blog/$1index.html.gz -f
74
- RewriteRule ^(.*) /blog/wp-content/cache/supercache/%{HTTP_HOST}/blog/$1index.html.gz [L]
75
-
76
- RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
77
- RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
78
- RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
79
- RewriteCond %{DOCUMENT_ROOT}/blog/wp-content/cache/supercache/%{HTTP_HOST}/blog/$1index.html -f
80
- RewriteRule ^(.*) /blog/wp-content/cache/supercache/%{HTTP_HOST}/$1/blog/index.html [L]
81
-
82
- Your .htaccess should look similar to this:
83
 
84
  -----------------.htaccess-----------------
85
  RewriteEngine On
86
  RewriteBase /
87
 
 
88
  RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
89
  RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
90
  RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
@@ -92,6 +55,7 @@ Your .htaccess should look similar to this:
92
  RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz -f
93
  RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz [L]
94
 
 
95
  RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
96
  RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
97
  RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
@@ -102,6 +66,9 @@ Your .htaccess should look similar to this:
102
  RewriteCond %{REQUEST_FILENAME} !-d
103
  RewriteRule . /index.php [L]
104
  -----------------.htaccess-----------------
 
 
 
105
 
106
  == Frequently Asked Questions ==
107
  If things don't work when you installed the plugin here are a few things to check:
2
  Contributors: donncha
3
  Tags: performance,caching,wp-cache
4
  Tested up to: 2.3.1
5
+ Stable tag: 0.4
6
 
7
  A modification of WP-Cache that produces static html files.
8
 
10
  A modification of WP-Cache that produces static html files. After a html file
11
  is generated your webserver will serve that file instead of processing the
12
  comparatively heavier and more expensive WordPress PHP scripts.
13
+
14
+ However, because a user's details are displayed in the comment form after
15
+ they leave a comment, the plugin will only serve static html files to:
16
+
17
+ 1. Users who are not logged in.
18
+ 2. Users who have not left a comment on your blog.
19
+ 3. Or users who have not viewed a password protected post.
20
+
21
+ The good news is that probably more than 99% of your visitors don't do any of
22
+ the above! Those users who don't see the static files will still benefit
23
+ because they will see regular WP-Cache cached files and your server won't be
24
+ as busy as before. This plugin should help your server cope with a front page
25
+ appearance on digg.com or other social networking site.
26
 
27
  This plugin is a modified version of the WP-Cache 2 plugin by Ricardo Galli Granada.
28
  His plugin is still available. We're standing on the shoulders of giants and benefiting
32
  1. http://mnm.uib.es/gallir/wp-cache-2/
33
  2. http://wordpress.org/extend/plugins/wp-cache/
34
 
35
+ Download: http://wordpress.org/extend/plugins/wp-super-cache/download/
 
 
 
 
 
 
 
 
 
 
 
 
 
36
 
37
  == Installation ==
38
+ 1. You must have mod_mime, mod_rewrite and fancy permalinks enabled for this plugin to work.
39
+ 2. If you have WP-Cache installed already, please disable it. Edit wp-config.php and make sure the WP_CACHE define is deleted, and remove the files wp-content/wp-cache-config.php and wp-content/advanced-cache.php. These will be recreated when you install this plugin.
40
  3. Upload this directory to your plugins directory. It will create a 'wp-content/plugins/wp-super-cache/' directory.
41
  4. If you are using WordPress MU you will need to install this in 'wp-content/mu-plugins/wp-super-cache/' and the file wp-cache.php must be copied into the mu-plugins directory.
42
  5. WordPress users should go to their Plugins page and activate "WP Super Cache".
43
  6. Now go to Options->WP Super Cache and enable caching. If you see an error message or a blank screen you may need to fix it. See the "FAQ" section later in this readme for instructions.
44
+ 7. mod_rewrite rules will be inserted into your .htaccess file. Look in your web root directory for this file. It should look similar to this:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
 
46
  -----------------.htaccess-----------------
47
  RewriteEngine On
48
  RewriteBase /
49
 
50
+ RewriteCond %{QUERY_STRING} !.*s=.*
51
  RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
52
  RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
53
  RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
55
  RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz -f
56
  RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz [L]
57
 
58
+ RewriteCond %{QUERY_STRING} !.*s=.*
59
  RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
60
  RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
61
  RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
66
  RewriteCond %{REQUEST_FILENAME} !-d
67
  RewriteRule . /index.php [L]
68
  -----------------.htaccess-----------------
69
+ 8. After you have enabled the plugin, look for "wp-content/cache/.htaccess". If it's not there you must create it. It should read:
70
+ AddEncoding x-gzip .gz
71
+ AddType text/html .gz
72
 
73
  == Frequently Asked Questions ==
74
  If things don't work when you installed the plugin here are a few things to check:
wp-cache-phase1.php CHANGED
@@ -25,11 +25,8 @@ if (!$cache_enabled || $_SERVER["REQUEST_METHOD"] == 'POST')
25
  return;
26
 
27
  $file_expired = false;
28
-
29
-
30
  $cache_filename = '';
31
  $meta_file = '';
32
-
33
  $wp_cache_gzip_encoding = '';
34
 
35
  function gzip_accepted(){
@@ -49,8 +46,8 @@ $key = $blogcacheid . md5($_SERVER['HTTP_HOST'].preg_replace('/#.*$/', '', $_SER
49
 
50
  $cache_filename = $file_prefix . $key . '.html';
51
  $meta_file = $file_prefix . $key . '.meta';
52
- $cache_file = $cache_path . $cache_filename;
53
- $meta_pathname = $cache_path . 'meta/' . $meta_file;
54
 
55
  $wp_start_time = microtime();
56
  if( ($mtime = @filemtime($meta_pathname)) ) {
25
  return;
26
 
27
  $file_expired = false;
 
 
28
  $cache_filename = '';
29
  $meta_file = '';
 
30
  $wp_cache_gzip_encoding = '';
31
 
32
  function gzip_accepted(){
46
 
47
  $cache_filename = $file_prefix . $key . '.html';
48
  $meta_file = $file_prefix . $key . '.meta';
49
+ $cache_file = realpath( $cache_path . $cache_filename );
50
+ $meta_pathname = realpath( $cache_path . 'meta/' . $meta_file );
51
 
52
  $wp_start_time = microtime();
53
  if( ($mtime = @filemtime($meta_pathname)) ) {
wp-cache-phase2.php CHANGED
@@ -12,7 +12,7 @@ function wp_cache_phase2() {
12
  global $wp_cache_gzip_encoding;
13
 
14
  wp_cache_mutex_init();
15
- if(function_exists('add_action')) {
16
  // Post ID is received
17
  add_action('publish_post', 'wp_cache_post_change', 0);
18
  add_action('edit_post', 'wp_cache_post_change', 0);
@@ -64,7 +64,7 @@ function wp_cache_is_rejected($uri) {
64
  if (strstr($uri, '/wp-admin/'))
65
  return true; // we don't allow caching of wp-admin for security reasons
66
  foreach ($cache_rejected_uri as $expr) {
67
- if( preg_match( "/$expr/", $uri ) )
68
  return true;
69
  }
70
  return false;
@@ -123,7 +123,6 @@ function wp_cache_ob_callback($buffer) {
123
  global $new_cache, $wp_cache_meta_object, $file_expired, $blog_id, $cache_compression;
124
  global $wp_cache_gzip_encoding, $super_cache_enabled;
125
 
126
-
127
  /* Mode paranoic, check for closing tags
128
  * we avoid caching incomplete files */
129
  if (is_404() || !preg_match('/(<\/html>|<\/rss>|<\/feed>)/i',$buffer) ) {
@@ -146,25 +145,22 @@ function wp_cache_ob_callback($buffer) {
146
  $dir = strtolower(preg_replace('/:.*$/', '', $_SERVER["HTTP_HOST"])).preg_replace('/[ <>\'\"\r\n\t\(\)]/', '', str_replace( '..', '', $_SERVER['REQUEST_URI']) ); // To avoid XSS attacs
147
  $dir = trailingslashit( $cache_path . 'supercache/' . $dir );
148
  $supercachedir = $cache_path . 'supercache/' . preg_replace('/:.*$/', '', $_SERVER["HTTP_HOST"]);
149
- if( $super_cache_enabled == true && is_dir( substr( $supercachedir, 0, -1 ) . '.disabled' ) ) {
150
  $super_cache_enabled = false;
151
- }
152
 
153
  $fr = @fopen($cache_path . $cache_filename, 'w');
154
  if (!$fr)
155
  $buffer = "Couldn't write to: " . $cache_path . $cache_filename . "\n";
156
  if( $super_cache_enabled ) {
157
- if( is_dir( $dir ) == false )
158
- @mkpath( $dir );
159
 
160
  $user_info = wp_cache_get_cookies_values();
161
  $do_cache = apply_filters( 'do_createsupercache', $user_info );
162
  if( $user_info == '' || $do_cache === true ) {
163
- if( !is_feed() ) { // don't super cache feeds
164
- $fr2 = @fopen("{$dir}index.html", 'w');
165
- if( $cache_compression )
166
- $gz = @gzopen("{$dir}index.html.gz", 'w3');
167
- }
168
  }
169
  }
170
 
@@ -237,20 +233,31 @@ function prune_super_cache($directory, $force = false) {
237
 
238
  $now = time();
239
 
 
 
240
  if (is_dir($directory)) {
241
- $entries = glob($directory. '/*');
 
242
  foreach ($entries as $entry) {
243
  if ($entry != '.' && $entry != '..') {
244
  prune_super_cache($entry, $force);
245
- if( $force || is_dir( $entry ) && @filemtime( $entry ) + $super_cache_max_time <= $now ) {
246
- if( $entry != $cache_path . '/meta' )
247
- @rmdir( $entry );
 
 
 
248
  }
249
  }
250
  }
251
  } else {
252
- if( $force || is_file($directory) && filemtime( $directory ) + $super_cache_max_time <= $now )
253
- unlink($directory);
 
 
 
 
 
254
  }
255
  }
256
 
@@ -269,8 +276,9 @@ function wp_cache_phase2_clean_expired($file_prefix) {
269
  continue;
270
  }
271
  if($file != '.' && $file != '..') {
272
- if ( is_dir( $cache_path . $file ) == false && (filemtime($cache_path . $file) + $cache_max_time) <= $now ) {
273
- @unlink($cache_path . $file);
 
274
  } elseif( is_dir( $cache_path . $file ) ) {
275
  prune_super_cache( $cache_path . $file );
276
  }
@@ -334,7 +342,7 @@ function wp_cache_shutdown_callback() {
334
  } else { // not a feed
335
  $value = 'text/html';
336
  }
337
- $value .= "; charset=\"" . get_settings('blog_charset') . "\"";
338
 
339
  @header("Content-Type: $value");
340
  array_push($wp_cache_meta_object->headers, "Content-Type: $value");
@@ -344,7 +352,7 @@ function wp_cache_shutdown_callback() {
344
  if ($new_cache) {
345
  $serial = serialize($wp_cache_meta_object);
346
  wp_cache_writers_entry();
347
- $fr = fopen($cache_path . 'meta/' . $meta_file, 'w');
348
  if( !$fr )
349
  @mkdir( $cache_path . 'meta/' );
350
  $fr = fopen($cache_path . 'meta/' . $meta_file, 'w');
@@ -367,12 +375,17 @@ function wp_cache_no_postid($id) {
367
  }
368
 
369
  function wp_cache_get_postid_from_comment($comment_id) {
 
370
  $comment = get_commentdata($comment_id, 1, true);
371
  $postid = $comment['comment_post_ID'];
372
  // Do nothing if comment is not moderated
373
  // http://ocaoimh.ie/2006/12/05/caching-wordpress-with-wp-cache-in-a-spam-filled-world
374
- if( !preg_match('/wp-admin\//', $_SERVER['REQUEST_URI']) && $comment['comment_approved'] == 'spam' ) // changed from 1 to "spam"
375
- return $post_id;
 
 
 
 
376
  // We must check it up again due to WP bugs calling two different actions
377
  // for delete, for example both wp_set_comment_status and delete_comment
378
  // are called when deleting a comment
@@ -383,22 +396,22 @@ function wp_cache_get_postid_from_comment($comment_id) {
383
  }
384
 
385
  function wp_cache_post_change($post_id) {
386
- global $file_prefix;
387
- global $cache_path;
388
- global $blog_id;
389
- global $blogcacheid;
390
  static $last_processed = -1;
391
 
392
  // Avoid cleaning twice the same pages
393
  if ($post_id == $last_processed) return $post_id;
394
  $last_processed = $post_id;
395
  $permalink = trailingslashit( str_replace( get_option( 'siteurl' ), '', post_permalink( $post_id ) ) );
396
- $siteurl = str_replace( 'http://', '', get_option( 'siteurl' ) );
397
- $dir = $cache_path . 'supercache/' . strtolower(preg_replace('/:.*$/', '', $siteurl ) );
398
- $files_to_delete = array( $dir . '/index.html', $dir . '/feed/index.html', $dir . $permalink . 'index.html', $dir . $permalink . 'feed/index.html' );
399
- foreach( $files_to_delete as $cache_file ) {
400
- @unlink( $cache_file );
401
- @unlink( $cache_file . '.gz' );
 
 
 
402
  }
403
 
404
  $meta = new CacheMeta;
@@ -444,11 +457,4 @@ function wp_cache_post_id() {
444
  if ($_POST['p'] > 0) return $_POST['p'];
445
  return 0;
446
  }
447
-
448
- if( !function_exists( 'mkpath' ) ) {
449
- function mkpath($path) {
450
- if(@mkdir($path, 0777) or file_exists($path)) return true;
451
- return (mkpath(dirname($path)) and mkdir($path, 0777));
452
- }
453
- }
454
  ?>
12
  global $wp_cache_gzip_encoding;
13
 
14
  wp_cache_mutex_init();
15
+ if(function_exists('add_action') && ( !defined( 'WPLOCKDOWN' ) || ( defined( 'WPLOCKDOWN' ) && constant( 'WPLOCKDOWN' ) == '0' ) ) ) {
16
  // Post ID is received
17
  add_action('publish_post', 'wp_cache_post_change', 0);
18
  add_action('edit_post', 'wp_cache_post_change', 0);
64
  if (strstr($uri, '/wp-admin/'))
65
  return true; // we don't allow caching of wp-admin for security reasons
66
  foreach ($cache_rejected_uri as $expr) {
67
+ if( preg_match( "~$expr~", $uri ) )
68
  return true;
69
  }
70
  return false;
123
  global $new_cache, $wp_cache_meta_object, $file_expired, $blog_id, $cache_compression;
124
  global $wp_cache_gzip_encoding, $super_cache_enabled;
125
 
 
126
  /* Mode paranoic, check for closing tags
127
  * we avoid caching incomplete files */
128
  if (is_404() || !preg_match('/(<\/html>|<\/rss>|<\/feed>)/i',$buffer) ) {
145
  $dir = strtolower(preg_replace('/:.*$/', '', $_SERVER["HTTP_HOST"])).preg_replace('/[ <>\'\"\r\n\t\(\)]/', '', str_replace( '..', '', $_SERVER['REQUEST_URI']) ); // To avoid XSS attacs
146
  $dir = trailingslashit( $cache_path . 'supercache/' . $dir );
147
  $supercachedir = $cache_path . 'supercache/' . preg_replace('/:.*$/', '', $_SERVER["HTTP_HOST"]);
148
+ if( !empty( $_GET ) || is_feed() || ( $super_cache_enabled == true && is_dir( substr( $supercachedir, 0, -1 ) . '.disabled' ) ) )
149
  $super_cache_enabled = false;
 
150
 
151
  $fr = @fopen($cache_path . $cache_filename, 'w');
152
  if (!$fr)
153
  $buffer = "Couldn't write to: " . $cache_path . $cache_filename . "\n";
154
  if( $super_cache_enabled ) {
155
+ if( @is_dir( $dir ) == false )
156
+ @wp_mkdir_p( $dir );
157
 
158
  $user_info = wp_cache_get_cookies_values();
159
  $do_cache = apply_filters( 'do_createsupercache', $user_info );
160
  if( $user_info == '' || $do_cache === true ) {
161
+ $fr2 = @fopen("{$dir}index.html", 'w');
162
+ if( $cache_compression )
163
+ $gz = @gzopen("{$dir}index.html.gz", 'w3');
 
 
164
  }
165
  }
166
 
233
 
234
  $now = time();
235
 
236
+ $protected_directories = array( $cache_path . '.htaccess', $cache_path . 'meta', $cache_path . 'supercache' );
237
+
238
  if (is_dir($directory)) {
239
+ $directory = trailingslashit( $directory );
240
+ $entries = glob($directory. '*');
241
  foreach ($entries as $entry) {
242
  if ($entry != '.' && $entry != '..') {
243
  prune_super_cache($entry, $force);
244
+ if( is_dir( $entry ) && ( $force || @filemtime( $entry ) + $super_cache_max_time <= $now ) ) {
245
+ $oktodelete = true;
246
+ if( in_array( $entry, $protected_directories ) )
247
+ $oktodelete = false;
248
+ if( $oktodelete )
249
+ @rmdir( addslashes( $entry ) );
250
  }
251
  }
252
  }
253
  } else {
254
+ if( is_file($directory) && ($force || filemtime( $directory ) + $super_cache_max_time <= $now ) ) {
255
+ $oktodelete = true;
256
+ if( in_array( $directory, $protected_directories ) )
257
+ $oktodelete = false;
258
+ if( $oktodelete )
259
+ @unlink( addslashes( $directory ) );
260
+ }
261
  }
262
  }
263
 
276
  continue;
277
  }
278
  if($file != '.' && $file != '..') {
279
+ if( is_dir( $cache_path . $file ) == false && (filemtime($cache_path . $file) + $cache_max_time) <= $now ) {
280
+ if( substr( $file, -9 ) != '.htaccess' )
281
+ @unlink($cache_path . $file);
282
  } elseif( is_dir( $cache_path . $file ) ) {
283
  prune_super_cache( $cache_path . $file );
284
  }
342
  } else { // not a feed
343
  $value = 'text/html';
344
  }
345
+ $value .= "; charset=\"" . get_option('blog_charset') . "\"";
346
 
347
  @header("Content-Type: $value");
348
  array_push($wp_cache_meta_object->headers, "Content-Type: $value");
352
  if ($new_cache) {
353
  $serial = serialize($wp_cache_meta_object);
354
  wp_cache_writers_entry();
355
+ $fr = @fopen($cache_path . 'meta/' . $meta_file, 'w');
356
  if( !$fr )
357
  @mkdir( $cache_path . 'meta/' );
358
  $fr = fopen($cache_path . 'meta/' . $meta_file, 'w');
375
  }
376
 
377
  function wp_cache_get_postid_from_comment($comment_id) {
378
+ global $super_cache_enabled;
379
  $comment = get_commentdata($comment_id, 1, true);
380
  $postid = $comment['comment_post_ID'];
381
  // Do nothing if comment is not moderated
382
  // http://ocaoimh.ie/2006/12/05/caching-wordpress-with-wp-cache-in-a-spam-filled-world
383
+ if( !preg_match('/wp-admin\//', $_SERVER['REQUEST_URI']) )
384
+ if( $comment['comment_approved'] == 'spam' ) { // changed from 1 to "spam"
385
+ return $post_id;
386
+ } elseif( $comment['comment_approved'] == '0' ) {
387
+ $super_cache_enabled = 0; // don't remove the super cache static file until comment is approved
388
+ }
389
  // We must check it up again due to WP bugs calling two different actions
390
  // for delete, for example both wp_set_comment_status and delete_comment
391
  // are called when deleting a comment
396
  }
397
 
398
  function wp_cache_post_change($post_id) {
399
+ global $file_prefix, $cache_path, $blog_id, $blogcacheid, $super_cache_enabled;
 
 
 
400
  static $last_processed = -1;
401
 
402
  // Avoid cleaning twice the same pages
403
  if ($post_id == $last_processed) return $post_id;
404
  $last_processed = $post_id;
405
  $permalink = trailingslashit( str_replace( get_option( 'siteurl' ), '', post_permalink( $post_id ) ) );
406
+ if( $super_cache_enabled ) {
407
+ $permalink = trailingslashit( str_replace( get_option( 'siteurl' ), '', post_permalink( $post_id ) ) );
408
+ $siteurl = str_replace( 'http://', '', get_option( 'siteurl' ) );
409
+ $dir = $cache_path . 'supercache/' . strtolower(preg_replace('/:.*$/', '', $siteurl ) );
410
+ $files_to_delete = array( $dir . '/index.html', $dir . '/feed/index.html', $dir . $permalink . 'index.html', $dir . $permalink . 'feed/index.html' );
411
+ foreach( $files_to_delete as $cache_file ) {
412
+ @unlink( $cache_file );
413
+ @unlink( $cache_file . '.gz' );
414
+ }
415
  }
416
 
417
  $meta = new CacheMeta;
457
  if ($_POST['p'] > 0) return $_POST['p'];
458
  return 0;
459
  }
 
 
 
 
 
 
 
460
  ?>
wp-cache.php CHANGED
@@ -2,8 +2,8 @@
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.3.1
7
  Author: Donncha O Caoimh
8
  Author URI: http://ocaoimh.ie/
9
  */
@@ -56,10 +56,11 @@ function get_wpcachehome() {
56
  function wp_cache_add_pages() {
57
  if( function_exists( 'is_site_admin' ) ) {
58
  if( is_site_admin() ) {
59
- add_submenu_page('wpmu-admin.php', __('WP Super Cache'), __('WP Super Cache'), 'administrator', __FILE__, 'wp_cache_manager');
 
60
  }
61
  } else {
62
- add_options_page('WP Super Cache', 'WP Super Cache', 'administrator', __FILE__, 'wp_cache_manager');
63
  }
64
  }
65
 
@@ -82,21 +83,24 @@ function wp_cache_manager() {
82
  echo '<strong>Configuration file changed, some values might be wrong. Load the page again from the "Options" menu to reset them.</strong>';
83
  }
84
 
85
- echo '<a name="main"></a><fieldset class="options"><legend>Main options</legend>';
86
  if ( !wp_cache_check_link() ||
87
  !wp_cache_verify_config_file() ||
88
  !wp_cache_verify_cache_dir() ) {
89
  echo "<br>Cannot continue... fix previous problems and retry.<br />";
90
- echo "</fieldset></div>\n";
91
  return;
92
  }
93
 
94
  if (!wp_cache_check_global_config()) {
95
- echo "</fieldset></div>\n";
96
  return;
97
  }
98
 
99
- echo "<h4>WP Super Cache is:</h4>";
 
 
 
 
100
  if ( $valid_nonce ) {
101
  if( isset( $_POST[ 'wp_cache_status' ] ) ) {
102
  switch( $_POST[ 'wp_cache_status' ] ) {
@@ -122,41 +126,73 @@ function wp_cache_manager() {
122
  }
123
  }
124
 
 
 
125
  echo '<form name="wp_manager" action="'. $_SERVER["REQUEST_URI"] . '" method="post">';
126
  ?>
127
- <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 />
128
- <label><input type='radio' name='wp_cache_status' value='none' <?php if( $cache_enabled == false ) { echo 'checked=checked'; } ?>> Disabled</label><br />
129
  <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 />
130
- <p><strong>Super Cache compression:</strong>
 
 
 
131
  <label><input type="radio" name="cache_compression" value="1" <?php if( $cache_compression ) { echo "checked=checked"; } ?>> Enabled</label>
132
  <label><input type="radio" name="cache_compression" value="0" <?php if( !$cache_compression ) { echo "checked=checked"; } ?>> Disabled</label>
133
  <p>Compression is disabled by default because some hosts have problems with compressed files. Switching this on and off clears the cache.</p>
134
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
135
  if( isset( $cache_compression_changed ) && isset( $_POST[ 'cache_compression' ] ) && !$cache_compression ) {
136
- ?><p><strong>Super Cache compression is now disabled. For maximum performance you should remove or comment out the following rules in your .htaccess file:</strong></p>
137
- <blockquote style='background-color: #ff6'><code>RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$<br />
138
- RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$<br />
139
- RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$<br />
140
- RewriteCond %{HTTP:Accept-Encoding} gzip<br />
141
- RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz -f<br />
142
- RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz [L]</code>
143
- </blockquote><?php
144
  } elseif( isset( $cache_compression_changed ) && isset( $_POST[ 'cache_compression' ] ) && $cache_compression ) {
145
- ?><p><strong>Super Cache compression is now enabled. You must add or uncomment the following rules in your .htaccess file:</strong></p>
146
- <blockquote style='background-color: #ff6'><code>RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$<br />
147
- RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$<br />
148
- RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$<br />
149
- RewriteCond %{HTTP:Accept-Encoding} gzip<br />
150
- RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz -f<br />
151
- RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz [L]</code>
152
- </blockquote><?php
153
  }
154
  echo '<div class="submit"><input type="submit"value="Update" /></div>';
155
  wp_nonce_field('wp-cache');
156
  echo "</form>\n";
 
 
157
 
158
  wp_cache_edit_max_time();
159
- echo '</fieldset>';
160
 
161
  echo '<a name="files"></a><fieldset class="options"><legend>Accepted filenames, rejected URIs</legend>';
162
  wp_cache_edit_rejected();
@@ -171,10 +207,12 @@ function wp_cache_manager() {
171
  wp_cache_restore();
172
 
173
  ob_start();
174
- if( !function_exists( 'do_cacheaction' ) ) {
175
- die( 'Install is not complete. Please delete wp-content/advanced-cache.php' );
176
- } else {
177
- do_cacheaction( 'cache_admin_page' );
 
 
178
  }
179
  $out = ob_get_contents();
180
  ob_end_clean();
@@ -199,6 +237,47 @@ function wp_cache_restore() {
199
 
200
  }
201
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
202
  function wp_cache_edit_max_time () {
203
  global $super_cache_max_time, $cache_max_time, $wp_cache_config_file, $valid_nonce;
204
 
@@ -219,16 +298,17 @@ function wp_cache_edit_max_time () {
219
  wp_cache_replace_line('^ *\$super_cache_max_time', "\$super_cache_max_time = $super_cache_max_time;", $wp_cache_config_file);
220
  }
221
  }
 
 
222
  echo '<form name="wp_edit_max_time" action="'. $_SERVER["REQUEST_URI"] . '" method="post">';
223
- echo '<label for="wp_max_time">Expire time (in seconds)</label>';
224
- echo "<input type=\"text\" name=\"wp_max_time\" value=\"$cache_max_time\" /><br />";
225
- echo '<label for="super_cache_max_time">Super Cache Expire time (in seconds)</label>';
226
- echo "<input type=\"text\" name=\"super_cache_max_time\" value=\"$super_cache_max_time\" />";
227
  echo '<div class="submit"><input type="submit" value="Change expiration" /></div>';
228
  wp_nonce_field('wp-cache');
229
  echo "</form>\n";
230
-
231
-
232
  }
233
 
234
  function wp_cache_sanitize_value($text, & $array) {
@@ -315,7 +395,7 @@ function wp_cache_edit_accepted() {
315
  function wp_cache_enable() {
316
  global $wp_cache_config_file, $cache_enabled, $supercachedir;
317
 
318
- if(get_settings('gzipcompression')) {
319
  echo "<b>Error: GZIP compression is enabled, disable it if you want to enable wp-cache.</b><br /><br />";
320
  return false;
321
  }
@@ -345,16 +425,20 @@ function wp_super_cache_enable() {
345
  function wp_super_cache_disable() {
346
  global $supercachedir, $wp_cache_config_file, $super_cache_enabled;
347
 
 
348
  if( is_dir( $supercachedir ) )
349
  rename( $supercachedir, $supercachedir . ".disabled" );
350
- wp_cache_replace_line('^ *\$super_cache_enabled', '$super_cache_enabled = false;', $wp_cache_config_file);
351
  $super_cache_enabled = false;
 
 
 
 
352
  }
353
 
354
  function wp_cache_is_enabled() {
355
  global $wp_cache_config_file;
356
 
357
- if(get_settings('gzipcompression')) {
358
  echo "<b>Warning</b>: GZIP compression is enabled in Wordpress, wp-cache will be bypassed until you disable gzip compression.<br />";
359
  return false;
360
  }
@@ -445,6 +529,18 @@ function wp_cache_verify_config_file() {
445
  echo "<b>Error:</b> wp-content directory (<b>$dir</b>) is not writable by the Web server.<br />Check its permissions.";
446
  return false;
447
  }
 
 
 
 
 
 
 
 
 
 
 
 
448
  if ( !file_exists($wp_cache_config_file) ) {
449
  if ( !file_exists($wp_cache_config_file_sample) ) {
450
  echo "<b>Error:</b> Sample WP-Cache config file (<b>$wp_cache_config_file_sample</b>) does not exist.<br />Verify you installation.";
@@ -452,9 +548,9 @@ function wp_cache_verify_config_file() {
452
  }
453
  copy($wp_cache_config_file_sample, $wp_cache_config_file);
454
  if( is_file( dirname(__FILE__) . '/wp-cache-config-sample.php' ) ) {
455
- wp_cache_replace_line('WPCACHEHOME', "define( 'WPCACHEHOME', " . str_replace( ABSPATH, 'ABSPATH . "', dirname(__FILE__) ) . "/\" );", $wp_cache_config_file);
456
  } elseif( is_file( dirname(__FILE__) . '/wp-super-cache/wp-cache-config-sample.php' ) ) {
457
- wp_cache_replace_line('WPCACHEHOME', "define( 'WPCACHEHOME', " . str_replace( ABSPATH, 'ABSPATH . "', dirname(__FILE__) ) . "/wp-super-cache/\" );", $wp_cache_config_file);
458
  }
459
  $new = true;
460
  }
@@ -468,21 +564,32 @@ function wp_cache_verify_config_file() {
468
 
469
  function wp_cache_check_link() {
470
  global $wp_cache_link, $wp_cache_file;
 
 
 
 
 
 
 
 
 
 
471
 
 
472
  if ( basename(@readlink($wp_cache_link)) != basename($wp_cache_file)) {
473
  @unlink($wp_cache_link);
474
  if( function_exists( 'symlink' ) ) {
475
- if (!@symlink ($wp_cache_file, $wp_cache_link)) {
476
- echo "<code>advanced-cache.php</code> link does not exist<br />";
477
- echo "Create it by executing: <br /><code>ln -s $wp_cache_file $wp_cache_link</code><br /> in your server<br />";
478
- return false;
479
- } else {
480
- if( !@copy( $wp_cache_file, $wp_cache_link ) ) {
481
- echo "<code>advanced-cache.php</code> does not exist<br />";
482
- echo "Create it by copying $wp_cache_file to $wp_cache_link<br /> in your server<br />";
483
- return false;
484
  }
 
 
485
  }
 
 
 
 
 
486
  }
487
  }
488
  return true;
@@ -540,7 +647,7 @@ function wp_cache_files() {
540
  $count = 0;
541
  $expired = 0;
542
  $now = time();
543
- if ( ($handle = opendir( $cache_path . 'meta/' )) ) {
544
  if ($list_files) echo "<table cellspacing=\"0\" cellpadding=\"5\">";
545
  while ( false !== ($file = readdir($handle))) {
546
  if ( preg_match("/^$file_prefix.*\.meta/", $file) ) {
@@ -627,7 +734,6 @@ function wp_cache_files() {
627
  echo '<div class="submit"><input type="submit" value="Regenerate Super Cache Stats" /></div>';
628
  wp_nonce_field('wp-cache');
629
  echo "</form>\n";
630
-
631
  echo '</fieldset>';
632
  }
633
 
2
  /*
3
  Plugin Name: WP Super Cache
4
  Plugin URI: http://ocaoimh.ie/wp-super-cache/
5
+ Description: Very fast caching module for WordPress. 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.4
7
  Author: Donncha O Caoimh
8
  Author URI: http://ocaoimh.ie/
9
  */
56
  function wp_cache_add_pages() {
57
  if( function_exists( 'is_site_admin' ) ) {
58
  if( is_site_admin() ) {
59
+ add_submenu_page('wpmu-admin.php', __('WP Super Cache'), __('WP Super Cache'), 'manage_options', __FILE__, 'wp_cache_manager');
60
+ add_options_page('WP Super Cache', 'WP Super Cache', 'manage_options', __FILE__, 'wp_cache_manager');
61
  }
62
  } else {
63
+ add_options_page('WP Super Cache', 'WP Super Cache', 'manage_options', __FILE__, 'wp_cache_manager');
64
  }
65
  }
66
 
83
  echo '<strong>Configuration file changed, some values might be wrong. Load the page again from the "Options" menu to reset them.</strong>';
84
  }
85
 
 
86
  if ( !wp_cache_check_link() ||
87
  !wp_cache_verify_config_file() ||
88
  !wp_cache_verify_cache_dir() ) {
89
  echo "<br>Cannot continue... fix previous problems and retry.<br />";
90
+ echo "</div>\n";
91
  return;
92
  }
93
 
94
  if (!wp_cache_check_global_config()) {
95
+ echo "</div>\n";
96
  return;
97
  }
98
 
99
+ if( !got_mod_rewrite() ) {
100
+ ?><h4>Mod rewrite is not installed! Super Cache will not fully work!</h4>
101
+ <p>mod_rewrite is required for serving Super Cache static files. You will still be able to use WP-Cache.</p><?php
102
+ }
103
+
104
  if ( $valid_nonce ) {
105
  if( isset( $_POST[ 'wp_cache_status' ] ) ) {
106
  switch( $_POST[ 'wp_cache_status' ] ) {
126
  }
127
  }
128
 
129
+ ?><fieldset class="options">
130
+ <legend>WP Super Cache Status</legend><?php
131
  echo '<form name="wp_manager" action="'. $_SERVER["REQUEST_URI"] . '" method="post">';
132
  ?>
133
+ <label><input type='radio' name='wp_cache_status' value='all' <?php if( $cache_enabled == true && $super_cache_enabled == true ) { echo 'checked=checked'; } ?>> WP Cache and Super Cache enabled</label><br />
134
+ <label><input type='radio' name='wp_cache_status' value='none' <?php if( $cache_enabled == false ) { echo 'checked=checked'; } ?>> WP Cache and Super Cache disabled</label><br />
135
  <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 />
136
+ </fieldset>
137
+
138
+ <fieldset class="options">
139
+ <legend>Super Cache Compression</legend>
140
  <label><input type="radio" name="cache_compression" value="1" <?php if( $cache_compression ) { echo "checked=checked"; } ?>> Enabled</label>
141
  <label><input type="radio" name="cache_compression" value="0" <?php if( !$cache_compression ) { echo "checked=checked"; } ?>> Disabled</label>
142
  <p>Compression is disabled by default because some hosts have problems with compressed files. Switching this on and off clears the cache.</p>
143
  <?php
144
+ $home_path = get_home_path();
145
+ $home_root = parse_url(get_option('home'));
146
+ $home_root = trailingslashit($home_root['path']);
147
+ $wprules = implode( "\n", extract_from_markers( $home_path.'.htaccess', 'WordPress' ) );
148
+ $wprules = str_replace( "RewriteEngine On\n", '', $wprules );
149
+ $wprules = str_replace( "RewriteBase $home_root\n", '', $wprules );
150
+ if( strpos( $wprules, 'supercache' ) == false ) { // only write the rules once
151
+ $rules = "<IfModule mod_rewrite.c>\n";
152
+ $rules .= "RewriteEngine On\n";
153
+ $rules .= "RewriteBase $home_root\n"; // props Chris Messina
154
+ $rules .= "RewriteCond %{QUERY_STRING} !.*s=.*\n";
155
+ $rules .= "RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$\n";
156
+ $rules .= "RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$\n";
157
+ $rules .= "RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$\n";
158
+ $rules .= "RewriteCond %{HTTP:Accept-Encoding} gzip\n";
159
+ $rules .= "RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz -f\n";
160
+ $rules .= "RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz [L]\n\n";
161
+
162
+ $rules .= "RewriteCond %{QUERY_STRING} !.*s=.*\n";
163
+ $rules .= "RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$\n";
164
+ $rules .= "RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$\n";
165
+ $rules .= "RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$\n";
166
+ $rules .= "RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html -f\n";
167
+ $rules .= "RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html [L]\n";
168
+ $rules .= $wprules . "\n";
169
+ $rules .= "</IfModule>";
170
+ if( insert_with_markers( $home_path.'.htaccess', 'WordPress', explode( "\n", $rules ) ) ) {
171
+ echo "<h4>Mod Rewrite rules updated!</h4>";
172
+ echo "<p><strong>" . ABSPATH . ".htaccess has been updated with the necessary mod_rewrite rules. Please verify they are correct. The file should look like this:</strong></p>\n";
173
+ } else {
174
+ echo "<h4>Mod Rewrite rules must be updated!</h4>";
175
+ echo "<p><strong> Your " . ABSPATH . ".htaccess is not writable by the webserver and must be updated with the necessary mod_rewrite rules. The new rules go above the regular WordPress rules as shown in the code below:</strong></p>\n";
176
+ }
177
+ echo "<p><pre># BEGIN WordPress\n{$rules}# END WordPress</pre></p>\n";
178
+ }
179
+ // http://allmybrain.com/2007/11/08/making-wp-super-cache-gzip-compression-work/
180
+ $gziprules = "AddEncoding x-gzip .gz\n";
181
+ $gziprules .= "AddType text/html .gz";
182
+ $gziprules = insert_with_markers( $cache_path . '.htaccess', 'supercache', explode( "\n", $gziprules ) );
183
+
184
  if( isset( $cache_compression_changed ) && isset( $_POST[ 'cache_compression' ] ) && !$cache_compression ) {
185
+ ?><p><strong>Super Cache compression is now disabled.</strong></p> <?php
 
 
 
 
 
 
 
186
  } elseif( isset( $cache_compression_changed ) && isset( $_POST[ 'cache_compression' ] ) && $cache_compression ) {
187
+ ?><p><strong>Super Cache compression is now enabled.</strong></p><?php
 
 
 
 
 
 
 
188
  }
189
  echo '<div class="submit"><input type="submit"value="Update" /></div>';
190
  wp_nonce_field('wp-cache');
191
  echo "</form>\n";
192
+ ?></fieldset><?php
193
+ wp_lock_down();
194
 
195
  wp_cache_edit_max_time();
 
196
 
197
  echo '<a name="files"></a><fieldset class="options"><legend>Accepted filenames, rejected URIs</legend>';
198
  wp_cache_edit_rejected();
207
  wp_cache_restore();
208
 
209
  ob_start();
210
+ if( defined( 'WP_CACHE' ) ) {
211
+ if( !function_exists( 'do_cacheaction' ) ) {
212
+ die( 'Install is not complete. Please verify that:<ul><li> wp-content/advanced-cache.php is a symlink or a copy of ' . WPCACHEHOME . '/wp-cache-phase1.php</li><li> ' . ABSPATH . 'wp-config.php includes the line "<code>define( "WP_CACHE", true );</code>"</li></ul>' );
213
+ } else {
214
+ do_cacheaction( 'cache_admin_page' );
215
+ }
216
  }
217
  $out = ob_get_contents();
218
  ob_end_clean();
237
 
238
  }
239
 
240
+ function comment_form_lockdown_message() {
241
+ ?><p><?php _e( "Comment moderation is enabled. Your comment may take some time to appear." ); ?></p><?php
242
+ }
243
+ if( defined( 'WPLOCKDOWN' ) && constant( 'WPLOCKDOWN' ) )
244
+ add_action( 'comment_form', 'comment_form_lockdown_message' );
245
+
246
+ function wp_lock_down() {
247
+ global $cache_path, $wp_cache_config_file, $valid_nonce;
248
+
249
+ if(isset($_POST['wp_lock_down']) && $valid_nonce) {
250
+ $wp_lock_down = $_POST['wp_lock_down'] == '1' ? '1' : '0';
251
+ wp_cache_replace_line('^.*WPLOCKDOWN', "define( 'WPLOCKDOWN', '$wp_lock_down' );", $wp_cache_config_file);
252
+ if( $wp_lock_down == '0' && function_exists( 'prune_super_cache' ) )
253
+ prune_super_cache( $cache_path, true ); // clear the cache after lockdown
254
+
255
+ }
256
+ if( !isset( $wp_lock_down ) ) {
257
+ if( defined( 'WPLOCKDOWN' ) ) {
258
+ $wp_lock_down = constant( 'WPLOCKDOWN' );
259
+ } else {
260
+ $wp_lock_down = '0';
261
+ }
262
+ }
263
+ ?><fieldset class="options">
264
+ <legend>Lock Down: <span style='color: #f00'><?php echo $wp_lock_down == '0' ? 'disabled' : 'enabled'; ?></span></legend>
265
+ <p>Prepare your server for an expected spike in traffic by enabling the lock down. When this is enabled, new comments on a post will not refresh the cached static files.</p><?php
266
+ if( $wp_lock_down == '1' ) {
267
+ ?><strong>WordPress is locked down. Super Cache static files will not be deleted when new comments are made.</strong><?php
268
+ } else {
269
+ ?><strong>WordPress is not locked down. New comments will refresh Super Cache static files as normal.</strong><?php
270
+ }
271
+ $new_lockdown = $wp_lock_down == '1' ? '0' : '1';
272
+ $new_lockdown_desc = $wp_lock_down == '1' ? 'Disable' : 'Enable';
273
+ echo '<form name="wp_lock_down" action="'. $_SERVER["REQUEST_URI"] . '" method="post">';
274
+ echo "<input type='hidden' name='wp_lock_down' value='{$new_lockdown}' />";
275
+ echo "<div class='submit'><input type='submit' value='{$new_lockdown_desc} Lock Down' /></div>";
276
+ wp_nonce_field('wp-cache');
277
+ echo "</form>\n";
278
+ ?></fieldset><?php
279
+ }
280
+
281
  function wp_cache_edit_max_time () {
282
  global $super_cache_max_time, $cache_max_time, $wp_cache_config_file, $valid_nonce;
283
 
298
  wp_cache_replace_line('^ *\$super_cache_max_time', "\$super_cache_max_time = $super_cache_max_time;", $wp_cache_config_file);
299
  }
300
  }
301
+ ?><fieldset class="options">
302
+ <legend>Expiry Time</legend><?php
303
  echo '<form name="wp_edit_max_time" action="'. $_SERVER["REQUEST_URI"] . '" method="post">';
304
+ echo '<label for="wp_max_time">Expire time:</label> ';
305
+ echo "<input type=\"text\" size=6 name=\"wp_max_time\" value=\"$cache_max_time\" /> seconds<br />";
306
+ echo '<label for="super_cache_max_time">Super Cache Expire time:</label> ';
307
+ echo "<input type=\"text\" size=6 name=\"super_cache_max_time\" value=\"$super_cache_max_time\" /> seconds";
308
  echo '<div class="submit"><input type="submit" value="Change expiration" /></div>';
309
  wp_nonce_field('wp-cache');
310
  echo "</form>\n";
311
+ ?></fieldset><?php
 
312
  }
313
 
314
  function wp_cache_sanitize_value($text, & $array) {
395
  function wp_cache_enable() {
396
  global $wp_cache_config_file, $cache_enabled, $supercachedir;
397
 
398
+ if(get_option('gzipcompression')) {
399
  echo "<b>Error: GZIP compression is enabled, disable it if you want to enable wp-cache.</b><br /><br />";
400
  return false;
401
  }
425
  function wp_super_cache_disable() {
426
  global $supercachedir, $wp_cache_config_file, $super_cache_enabled;
427
 
428
+ wp_cache_replace_line('^ *\$super_cache_enabled', '$super_cache_enabled = false;', $wp_cache_config_file);
429
  if( is_dir( $supercachedir ) )
430
  rename( $supercachedir, $supercachedir . ".disabled" );
 
431
  $super_cache_enabled = false;
432
+ sleep( 1 ); // allow existing processes to write to the supercachedir and then delete it
433
+ if (function_exists ('prune_super_cache') && is_dir( $supercachedir ) ) {
434
+ prune_super_cache( $supercachedir, true );
435
+ }
436
  }
437
 
438
  function wp_cache_is_enabled() {
439
  global $wp_cache_config_file;
440
 
441
+ if(get_option('gzipcompression')) {
442
  echo "<b>Warning</b>: GZIP compression is enabled in Wordpress, wp-cache will be bypassed until you disable gzip compression.<br />";
443
  return false;
444
  }
529
  echo "<b>Error:</b> wp-content directory (<b>$dir</b>) is not writable by the Web server.<br />Check its permissions.";
530
  return false;
531
  }
532
+ if ( file_exists($wp_cache_config_file) ) {
533
+ $lines = join( ' ', file( $wp_cache_config_file ) );
534
+ if( strpos( $lines, 'WPCACHEHOME' ) === false ) {
535
+ if( is_writable( $wp_cache_config_file ) ) {
536
+ @unlink( $wp_cache_config_file );
537
+ } else {
538
+ echo "<b>Error:</b> Your WP-Cache config file (<b>$wp_cache_config_file</b>) is out of date and not writable by the Web server.<br />Please delete it and refresh this page.";
539
+ return false;
540
+ }
541
+ }
542
+ }
543
+
544
  if ( !file_exists($wp_cache_config_file) ) {
545
  if ( !file_exists($wp_cache_config_file_sample) ) {
546
  echo "<b>Error:</b> Sample WP-Cache config file (<b>$wp_cache_config_file_sample</b>) does not exist.<br />Verify you installation.";
548
  }
549
  copy($wp_cache_config_file_sample, $wp_cache_config_file);
550
  if( is_file( dirname(__FILE__) . '/wp-cache-config-sample.php' ) ) {
551
+ wp_cache_replace_line('WPCACHEHOME', "define( 'WPCACHEHOME', ABSPATH . " . str_replace( '\\', '/', str_replace( ABSPATH, ' "', dirname(__FILE__) ) ) . "/\" );", $wp_cache_config_file);
552
  } elseif( is_file( dirname(__FILE__) . '/wp-super-cache/wp-cache-config-sample.php' ) ) {
553
+ wp_cache_replace_line('WPCACHEHOME', "define( 'WPCACHEHOME', ABSPATH . " . str_replace( '\\', '/', str_replace( ABSPATH, ' "', dirname(__FILE__) ) ) . "/wp-super-cache/\" );", $wp_cache_config_file);
554
  }
555
  $new = true;
556
  }
564
 
565
  function wp_cache_check_link() {
566
  global $wp_cache_link, $wp_cache_file;
567
+
568
+ if( file_exists($wp_cache_link) ) {
569
+ if( strpos( join( "\n", file( $wp_cache_link ) ), 'WPCACHEHOME' ) ) {
570
+ // read the file and verify it's a super-cache file and not the wp-cache one.
571
+ return true;
572
+ } else {
573
+ // remove the old version
574
+ @unlink($wp_cache_link);
575
+ }
576
+ }
577
 
578
+ $ret = true;
579
  if ( basename(@readlink($wp_cache_link)) != basename($wp_cache_file)) {
580
  @unlink($wp_cache_link);
581
  if( function_exists( 'symlink' ) ) {
582
+ if( !@symlink ($wp_cache_file, $wp_cache_link) ) {
583
+ $ret = false;
 
 
 
 
 
 
 
584
  }
585
+ } elseif( !@copy( $wp_cache_file, $wp_cache_link ) ) {
586
+ $ret = false;
587
  }
588
+ if( !$ret ) {
589
+ echo "<code>advanced-cache.php</code> does not exist<br />";
590
+ echo "Create it by executing: <br /><code>ln -s $wp_cache_file $wp_cache_link</code><br /> in your server<br />";
591
+ echo "Or by copying $wp_cache_file to $wp_cache_link.<br />";
592
+ return false;
593
  }
594
  }
595
  return true;
647
  $count = 0;
648
  $expired = 0;
649
  $now = time();
650
+ if ( ($handle = @opendir( $cache_path . 'meta/' )) ) {
651
  if ($list_files) echo "<table cellspacing=\"0\" cellpadding=\"5\">";
652
  while ( false !== ($file = readdir($handle))) {
653
  if ( preg_match("/^$file_prefix.*\.meta/", $file) ) {
734
  echo '<div class="submit"><input type="submit" value="Regenerate Super Cache Stats" /></div>';
735
  wp_nonce_field('wp-cache');
736
  echo "</form>\n";
 
737
  echo '</fieldset>';
738
  }
739