WP Super Cache - Version 0.2

Version Description

Download this release

Release Info

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

Code changes from version 0.1 to 0.2

Files changed (4) hide show
  1. readme.txt +159 -156
  2. wp-cache-phase1.php +14 -3
  3. wp-cache-phase2.php +35 -14
  4. wp-cache.php +19 -14
readme.txt CHANGED
@@ -1,156 +1,159 @@
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.
 
 
 
1
+ === WP Super Cache ===
2
+ Contributors: donncha
3
+ Donate link: http://ocaoimh.ie/
4
+ Tags: performance,caching,wp-cache
5
+ Tested up to: 2.3.1
6
+ Stable Tag: 0.2
7
+
8
+ A modification of WP-Cache that produces static html files.
9
+
10
+ == Description ==
11
+ A modification of WP-Cache that produces static html files. After a html file
12
+ is generated your webserver will serve that file instead of processing the
13
+ comparatively heavier and more expensive WordPress PHP scripts.
14
+ It will only cache and serve files to users who are not logged in, who
15
+ have not left a comment on your blog, or who have viewed a password protected
16
+ post. That still probably leave 90% of your visitors who will benefit. The users
17
+ mentioned above will also benefit because your server won't be as busy as before.
18
+ This script should help your server cope with a front page appearance on digg.com
19
+ or other social networking site.
20
+
21
+ This plugin is a modified version of the WP-Cache 2 plugin by Ricardo Galli Granada.
22
+ His plugin is still available. We're standing on the shoulders of giants and benefiting
23
+ from the power of the GPL here. Thanks Ricardo for creating such a great plugin!
24
+ See the following URLs for more info on WP-Cache 2
25
+
26
+ 1. http://mnm.uib.es/gallir/wp-cache-2/
27
+ 2. http://wordpress.org/extend/plugins/wp-cache/
28
+
29
+ A classic method of preparing an underpowered site for a Digg frontpage appearance
30
+ or a Slashdotting has been to manually save copies of dynamically generated pages,
31
+ and place them in directories that match the permalinks structure.
32
+
33
+ This method of performance enhancement does help servers handle a higher load
34
+ without crashing, but is only effective when an oncoming rush of traffic can be
35
+ anticipated.
36
+
37
+ WP-Cache alone, while helpful, is not adequate in many cases, so this modification
38
+ was created to effectively mimic the manual page caching method, but to handle it
39
+ in an automated fashion.
40
+
41
+ Original WP-Cache by Ricardo Galli Granada, http://mnm.uib.es/gallir/
42
+ WP Super Cache by Donncha O Caoimh, http://ocaoimh.ie/
43
+
44
+ == Installation ==
45
+ 1. You must have fancy permalinks enabled for this to work.
46
+ 2. If you have WP-Cache installed already, please disable it. Edit wp-config.php
47
+ and make sure the WP_CACHE define is deleted, and remove the file
48
+ wp-content/advanced-cache.php. These will be recreated when you install this
49
+ plugin.
50
+ 3. Upload this directory to your plugins directory. It will create a
51
+ 'wp-content/plugins/wp-super-cache/' directory.
52
+ 4. If you are using WordPress MU you will need to install this in
53
+ 'wp-content/mu-plugins/wp-super-cache/' and the file wp-cache.php
54
+ must be copied into the mu-plugins directory.
55
+ 5. WordPress users should go to their Plugins page and activate "WP Super Cache".
56
+ 6. Now go to Options->WP Super Cache and enable caching. If you see an error message
57
+ or a blank screen you may need to fix it. See the "FAQ" section later in this
58
+ readme for instructions.
59
+ 7. Edit the .htaccess file in your root directory and add the following code:
60
+
61
+ RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
62
+ RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
63
+ RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
64
+ RewriteCond %{HTTP:Accept-Encoding} gzip
65
+ RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz -f
66
+ RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz [L]
67
+
68
+ RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
69
+ RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
70
+ RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
71
+ RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html -f
72
+ RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html [L]
73
+
74
+ That code must be inserted above the standard WordPress rewrite rules.
75
+ If your blog isn't located at the root of your server, you must add that directory
76
+ to the rules. For example, if your blog is in the directory "/blog/":
77
+
78
+ RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
79
+ RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
80
+ RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
81
+ RewriteCond %{HTTP:Accept-Encoding} gzip
82
+ RewriteCond %{DOCUMENT_ROOT}/blog/wp-content/cache/supercache/%{HTTP_HOST}/blog/$1index.html.gz -f
83
+ RewriteRule ^(.*) /blog/wp-content/cache/supercache/%{HTTP_HOST}/blog/$1index.html.gz [L]
84
+
85
+ RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
86
+ RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
87
+ RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
88
+ RewriteCond %{DOCUMENT_ROOT}/blog/wp-content/cache/supercache/%{HTTP_HOST}/blog/$1index.html -f
89
+ RewriteRule ^(.*) /blog/wp-content/cache/supercache/%{HTTP_HOST}/$1/blog/index.html [L]
90
+
91
+ Your .htaccess should look similar to this:
92
+
93
+ -----------------.htaccess-----------------
94
+ RewriteEngine On
95
+ RewriteBase /
96
+
97
+ RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
98
+ RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
99
+ RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
100
+ RewriteCond %{HTTP:Accept-Encoding} gzip
101
+ RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz -f
102
+ RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html.gz [L]
103
+
104
+ RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$
105
+ RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$
106
+ RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$
107
+ RewriteCond %{DOCUMENT_ROOT}/wp-content/cache/supercache/%{HTTP_HOST}/$1index.html -f
108
+ RewriteRule ^(.*) /wp-content/cache/supercache/%{HTTP_HOST}/$1index.html [L]
109
+
110
+ RewriteCond %{REQUEST_FILENAME} !-f
111
+ RewriteCond %{REQUEST_FILENAME} !-d
112
+ RewriteRule . /index.php [L]
113
+ -----------------.htaccess-----------------
114
+
115
+ == Frequently Asked Questions ==
116
+ If things don't work when you installed the plugin here are a few things to check:
117
+ 1. Is wp-content writable by the web server?
118
+ 2. Is there a wp-content/wp-cache-config.php ? If not, copy the file
119
+ wp-super-cache/wp-cache-config-sample.php to wp-content/wp-cache-config.php
120
+ and make sure WPCACHEHOME points at the right place. "plugins" should be
121
+ "mu-plugins" if you're using WordPress MU.
122
+ 3. Is there a wp-content/advanced-cache.php ? If not, then you must symlink
123
+ wp-super-cache/wp-cache-phase1.php to it with the command while in the
124
+ wp-content folder:
125
+ ln -s plugins/wp-super-cache/wp-cache-phase1.php advanced-cache.php
126
+ If you can't do that, then copy the file. That will work too.
127
+ 4. Make sure the following line is in wp-config.php
128
+ define( 'WP_CACHE', true );
129
+ 5. Try the Options->WP Super Cache page again and enable cache.
130
+ 6. Look in wp-content/cache/supercache/. Are there directories and files there?
131
+ 7. Anything in your php error_log?
132
+ 8. If your browser keeps asking you to save the file after the super cache is installed
133
+ you must disable Super Cache compression. Go to the Options->WP Super Cache page and disable
134
+ it there.
135
+
136
+ == Custom Caching ==
137
+ It is now possible to hook into the caching process using the add_cacheacton() function.
138
+ Three hooks are available:
139
+
140
+ 1. 'wp_cache_get_cookies_values' - modify the key used by WP Cache.
141
+ 2. 'add_cacheaction' - runs in phase2. Allows a plugin to add WordPress hooks.
142
+ 3. 'cache_admin_page' - runs in the admin page. Use it to add modify that page.
143
+
144
+ There is one regular WordPress filter too. Use the "do_createsupercache" filter
145
+ to customize the checks made before caching. The filter accepts one parameter.
146
+ The output of WP-Cache's wp_cache_get_cookies_values() function.
147
+
148
+ See plugins/searchengine.php as an example I use for my [No Adverts for Friends](plugin at http://ocaoimh.ie/no-adverts-for-friends/)
149
+
150
+ == Updates ==
151
+ Updates to the plugin will be posted here, to http://ocaoimh.ie/ and the page
152
+ http://ocaoimh.ie/wp-super-cache/ will always link to the newest version.
153
+
154
+ == Thanks ==
155
+ I would sincerely like to thank [John Pozadzides](http://onemansblog.com/) for
156
+ giving me the idea for this, for writing the "How it works" section and for
157
+ testing the plugin through 2 front page appearances on digg.com
158
+ Thanks to James Farmer and Andrew Billits of [Edu Blogs](http://edublogs.org/) fame who helped me
159
+ make this more WordPress MU friendly.
wp-cache-phase1.php CHANGED
@@ -30,7 +30,20 @@ $file_expired = false;
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;
@@ -45,7 +58,6 @@ if( ($mtime = @filemtime($meta_pathname)) ) {
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) {
@@ -58,7 +70,6 @@ if( ($mtime = @filemtime($meta_pathname)) ) {
58
  if(!@readfile ($cache_file))
59
  return;
60
  }
61
- echo $log;
62
  die;
63
  }
64
  $file_expired = true; // To signal this file was expired
30
  $cache_filename = '';
31
  $meta_file = '';
32
 
33
+ $wp_cache_gzip_encoding = '';
34
+
35
+ function gzip_accepted(){
36
+ if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') === false) return false;
37
+ if (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'x-gzip') === false) return 'gzip';
38
+ return 'x-gzip';
39
+ }
40
+
41
+ if ($cache_compression) {
42
+ $wp_cache_gzip_encoding = gzip_accepted();
43
+ }
44
+
45
+ $key = $blogcacheid . md5($_SERVER['HTTP_HOST'].preg_replace('/#.*$/', '', $_SERVER['REQUEST_URI']).$wp_cache_gzip_encoding.wp_cache_get_cookies_values());
46
+
47
  $cache_filename = $file_prefix . $key . '.html';
48
  $meta_file = $file_prefix . $key . '.meta';
49
  $cache_file = $cache_path . $cache_filename;
58
  foreach ($meta->headers as $header) {
59
  header($header);
60
  }
 
61
  if ( !($content_size = @filesize($cache_file)) > 0 || $mtime < @filemtime($cache_file))
62
  return;
63
  if ($meta->dynamic) {
70
  if(!@readfile ($cache_file))
71
  return;
72
  }
 
73
  die;
74
  }
75
  $file_expired = true; // To signal this file was expired
wp-cache-phase2.php CHANGED
@@ -9,6 +9,7 @@ $new_cache = false;
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')) {
@@ -43,6 +44,7 @@ function wp_cache_phase2() {
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();
@@ -117,8 +119,9 @@ function wp_cache_writers_exit() {
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
@@ -142,22 +145,27 @@ function wp_cache_ob_callback($buffer) {
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
@@ -175,7 +183,21 @@ function wp_cache_ob_callback($buffer) {
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 )
@@ -269,7 +291,6 @@ function wp_cache_shutdown_callback() {
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});
9
 
10
  function wp_cache_phase2() {
11
  global $cache_filename, $cache_acceptable_files, $wp_cache_meta_object;
12
+ global $wp_cache_gzip_encoding;
13
 
14
  wp_cache_mutex_init();
15
  if(function_exists('add_action')) {
44
 
45
  function wp_cache_get_response_headers() {
46
  if(function_exists('apache_response_headers')) {
47
+ flush();
48
  $headers = apache_response_headers();
49
  } else if(function_exists('headers_list')) {
50
  $headers = array();
119
  }
120
 
121
  function wp_cache_ob_callback($buffer) {
122
+ global $cache_path, $cache_filename, $meta_file, $wp_start_time, $supercachedir;
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
145
  if( !((!$file_expired && $mtime) || ($mtime && $file_expired && (time() - $mtime) < 5)) ) {
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
 
171
  if (preg_match('/<!--mclude|<!--mfunc/', $buffer)) { //Dynamic content
183
  if( $gz )
184
  gzwrite($gz, $store . '<!-- super cache gz -->' );
185
  } else {
186
+ $log = "<!-- Cached page served by WP-Cache -->\n";
187
+
188
+ if ($wp_cache_gzip_encoding) {
189
+ $log .= "<!-- Compression = " . $wp_cache_gzip_encoding ." -->";
190
+ $gzdata = gzencode($buffer . $log, 3, FORCE_GZIP);
191
+ $gzsize = strlen($gzdata);
192
+
193
+ array_push($wp_cache_meta_object->headers, 'Content-Encoding: ' . $wp_cache_gzip_encoding);
194
+ array_push($wp_cache_meta_object->headers, 'Vary: Accept-Encoding');
195
+ array_push($wp_cache_meta_object->headers, 'Content-Length: ' . strlen($gzdata));
196
+ // Return uncompressed data & store compressed for later use
197
+ fputs($fr, $gzdata);
198
+ }else{ // no compression
199
+ fputs($fr, $buffer.$log);
200
+ }
201
  if( $fr2 )
202
  fputs($fr2, $buffer . '<!-- super cache -->' );
203
  if( $gz )
291
  $wp_cache_meta_object->post = wp_cache_post_id();
292
 
293
  $response = wp_cache_get_response_headers();
 
294
  foreach ($known_headers as $key) {
295
  if(isset($response{$key})) {
296
  array_push($wp_cache_meta_object->headers, "$key: " . $response{$key});
wp-cache.php CHANGED
@@ -114,7 +114,8 @@ function wp_cache_manager() {
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
  }
@@ -130,7 +131,7 @@ function wp_cache_manager() {
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 />
@@ -645,13 +646,15 @@ function wp_cache_clean_cache($file_prefix) {
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
 
@@ -672,13 +675,15 @@ function wp_cache_clean_expired($file_prefix) {
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
 
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
+ if( function_exists( 'prune_super_cache' ) )
118
+ prune_super_cache ($cache_path, true);
119
  delete_option( 'super_cache_meta' );
120
  }
121
  }
131
  <p>Compression is disabled by default because some hosts have problems with compressed files. Switching this on and off clears the cache.</p>
132
  <?php
133
  if( isset( $cache_compression_changed ) && isset( $_POST[ 'cache_compression' ] ) && !$cache_compression ) {
134
+ ?><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>
135
  <blockquote style='background-color: #ff6'><code>RewriteCond %{HTTP_COOKIE} !^.*comment_author_.*$<br />
136
  RewriteCond %{HTTP_COOKIE} !^.*wordpressuser.*$<br />
137
  RewriteCond %{HTTP_COOKIE} !^.*wp-postpass_.*$<br />
646
 
647
  // If phase2 was compiled, use its function to avoid race-conditions
648
  if(function_exists('wp_cache_phase2_clean_cache')) {
649
+ if (function_exists ('prune_super_cache')) {
650
+ if( is_dir( $supercachedir ) ) {
651
+ prune_super_cache( $supercachedir, true );
652
+ } elseif( is_dir( $supercachedir . '.disabled' ) ) {
653
+ prune_super_cache( $supercachedir . '.disabled', true );
654
+ }
655
+ prune_super_cache( $cache_path, true );
656
+ $_POST[ 'super_cache_stats' ] = 1; // regenerate super cache stats;
657
  }
 
 
658
  return wp_cache_phase2_clean_cache($file_prefix);
659
  }
660
 
675
 
676
  // If phase2 was compiled, use its function to avoid race-conditions
677
  if(function_exists('wp_cache_phase2_clean_expired')) {
678
+ if (function_exists ('prune_super_cache')) {
679
+ $dir = $cache_path . 'supercache/' . preg_replace('/:.*$/', '', $_SERVER["HTTP_HOST"]);
680
+ if( is_dir( $dir ) ) {
681
+ prune_super_cache( $dir );
682
+ } elseif( is_dir( $dir . '.disabled' ) ) {
683
+ prune_super_cache( $dir . '.disabled' );
684
+ }
685
+ $_POST[ 'super_cache_stats' ] = 1; // regenerate super cache stats;
686
  }
 
687
  return wp_cache_phase2_clean_expired($file_prefix);
688
  }
689