PluginProbe
Autoptimize / 1.8.2
Autoptimize v1.8.2
2.2.2 2.3.0 2.3.1 2.3.2 2.3.3 2.3.4 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 All 107 releases
← All changes | classes/autoptimizeCache.php +197 -246 2.2.21.8.2 View file →
@@ -1,270 +1,221 @@
1 1 <?php
2 2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3 3
4 -class autoptimizeCache {
5 - private $filename;
6 - private $mime;
7 - private $cachedir;
8 - private $delayed;
9 -
10 - public function __construct($md5,$ext='php') {
11 - $this->cachedir = AUTOPTIMIZE_CACHE_DIR;
12 - $this->delayed = AUTOPTIMIZE_CACHE_DELAY;
13 - $this->nogzip = AUTOPTIMIZE_CACHE_NOGZIP;
14 - if($this->nogzip == false) {
15 - $this->filename = AUTOPTIMIZE_CACHEFILE_PREFIX.$md5.'.php';
16 - } else {
17 - if (in_array($ext, array("js","css"))) {
18 - $this->filename = $ext.'/'.AUTOPTIMIZE_CACHEFILE_PREFIX.$md5.'.'.$ext;
19 - } else {
20 - $this->filename = AUTOPTIMIZE_CACHEFILE_PREFIX.$md5.'.'.$ext;
21 - }
22 - }
23 - }
24 -
25 - public function check() {
26 - if(!file_exists($this->cachedir.$this->filename)) {
27 - // No cached file, sorry
28 - return false;
29 - }
30 - // Cache exists!
31 - return true;
32 - }
33 -
34 - public function retrieve() {
35 - if($this->check()) {
36 - if($this->nogzip == false) {
37 - return file_get_contents($this->cachedir.$this->filename.'.none');
38 - } else {
39 - return file_get_contents($this->cachedir.$this->filename);
40 - }
41 - }
42 - return false;
43 - }
44 -
45 - public function cache($code,$mime) {
46 - if($this->nogzip == false) {
47 - $file = ($this->delayed ? 'delayed.php' : 'default.php');
48 - $phpcode = file_get_contents(AUTOPTIMIZE_PLUGIN_DIR.'/config/'.$file);
49 - $phpcode = str_replace(array('%%CONTENT%%','exit;'),array($mime,''),$phpcode);
50 - file_put_contents($this->cachedir.$this->filename,$phpcode, LOCK_EX);
51 - file_put_contents($this->cachedir.$this->filename.'.none',$code, LOCK_EX);
52 - if(!$this->delayed) {
53 - // Compress now!
54 - file_put_contents($this->cachedir.$this->filename.'.deflate',gzencode($code,9,FORCE_DEFLATE), LOCK_EX);
55 - file_put_contents($this->cachedir.$this->filename.'.gzip',gzencode($code,9,FORCE_GZIP), LOCK_EX);
56 - }
57 - } else {
58 - // Write code to cache without doing anything else
59 - file_put_contents($this->cachedir.$this->filename,$code, LOCK_EX);
60 - if (apply_filters('autoptimize_filter_cache_create_static_gzip', false)) {
61 - // Create an additional cached gzip file
62 - file_put_contents($this->cachedir.$this->filename.'.gz', gzencode($code,9,FORCE_GZIP), LOCK_EX);
63 - }
64 - }
65 - }
66 -
67 - public function getname() {
68 - apply_filters('autoptimize_filter_cache_getname',AUTOPTIMIZE_CACHE_URL.$this->filename);
69 - return $this->filename;
70 - }
71 -
72 - static function clearall() {
73 - if(!autoptimizeCache::cacheavail()) {
74 - return false;
75 - }
76 -
77 - // scan the cachedirs
78 - foreach (array("","js","css") as $scandirName) {
79 - $scan[$scandirName] = scandir(AUTOPTIMIZE_CACHE_DIR.$scandirName);
80 - }
81 -
82 - // clear the cachedirs
83 - foreach ($scan as $scandirName=>$scanneddir) {
84 - $thisAoCacheDir=rtrim(AUTOPTIMIZE_CACHE_DIR.$scandirName,"/")."/";
85 - foreach($scanneddir as $file) {
86 - if(!in_array($file,array('.','..')) && strpos($file,AUTOPTIMIZE_CACHEFILE_PREFIX) !== false && is_file($thisAoCacheDir.$file)) {
87 - @unlink($thisAoCacheDir.$file);
88 - }
89 - }
90 - }
4 +class autoptimizeCache
5 +{
6 + private $filename;
7 + private $mime;
8 + private $cachedir;
9 + private $delayed;
10 +
11 + public function __construct($md5,$ext='php')
12 + {
13 + $this->cachedir = AUTOPTIMIZE_CACHE_DIR;
14 + $this->delayed = AUTOPTIMIZE_CACHE_DELAY;
15 + $this->nogzip = AUTOPTIMIZE_CACHE_NOGZIP;
16 + if($this->nogzip == false)
17 + $this->filename = 'autoptimize_'.$md5.'.php';
18 + else
19 + $this->filename = 'autoptimize_'.$md5.'.'.$ext;
20 + }
21 +
22 + public function check()
23 + {
24 + if(!file_exists($this->cachedir.$this->filename))
25 + {
26 + //No cached file, sorry
27 + return false;
28 + }
29 + //Cache exists!
30 + return true;
31 + }
32 +
33 + public function retrieve()
34 + {
35 + if($this->check())
36 + {
37 + if($this->nogzip == false)
38 + return file_get_contents($this->cachedir.$this->filename.'.none');
39 + else
40 + return file_get_contents($this->cachedir.$this->filename);
41 + }
42 + return false;
43 + }
44 +
45 + public function cache($code,$mime)
46 + {
47 + if($this->nogzip == false)
48 + {
49 + $file = ($this->delayed ? 'delayed.php' : 'default.php');
50 + $phpcode = file_get_contents(WP_PLUGIN_DIR.'/autoptimize/config/'.$file);
51 + $phpcode = str_replace(array('%%CONTENT%%','exit;'),array($mime,''),$phpcode);
52 + file_put_contents($this->cachedir.$this->filename,$phpcode);
53 + file_put_contents($this->cachedir.$this->filename.'.none',$code);
54 + if(!$this->delayed)
55 + {
56 + //Compress now!
57 + file_put_contents($this->cachedir.$this->filename.'.deflate',gzencode($code,9,FORCE_DEFLATE));
58 + file_put_contents($this->cachedir.$this->filename.'.gzip',gzencode($code,9,FORCE_GZIP));
59 + }
60 + }else{
61 + //Write code to cache without doing anything else
62 + file_put_contents($this->cachedir.$this->filename,$code);
63 + }
64 + }
65 +
66 + public function getname()
67 + {
68 + return $this->filename;
69 + }
70 +
71 + static function clearall()
72 + {
73 + //Cache not available :(
74 + if(!autoptimizeCache::cacheavail())
75 + return false;
76 +
77 + //Clean the cachedir
78 + $scan = scandir(AUTOPTIMIZE_CACHE_DIR);
79 + foreach($scan as $file)
80 + {
81 + if(!in_array($file,array('.','..')) && strpos($file,'autoptimize') !== false && is_file(AUTOPTIMIZE_CACHE_DIR.$file))
82 + {
83 + @unlink(AUTOPTIMIZE_CACHE_DIR.$file);
84 + }
85 + }
91 86
92 - @unlink(AUTOPTIMIZE_CACHE_DIR."/.htaccess");
93 - delete_transient("autoptimize_stats");
87 + @unlink(AUTOPTIMIZE_CACHE_DIR."/.htaccess");
88 +
89 + // Do we need to clean any caching plugins cache-files?
90 + if(function_exists('wp_cache_clear_cache')) {
91 + wp_cache_clear_cache(); // wp super cache
92 + } else if ( function_exists('w3tc_pgcache_flush') ) {
93 + w3tc_pgcache_flush(); //w3 total cache
94 + } else if ( function_exists('hyper_cache_invalidate') ) {
95 + hyper_cache_invalidate(); // hypercache
96 + } else if ( function_exists('wp_fast_cache_bulk_delete_all') ) {
97 + wp_fast_cache_bulk_delete_all(); // wp fast cache
98 + } else if (class_exists("WpFastestCache")) {
99 + $wpfc = new WpFastestCache(); // wp fastest cache
100 + $wpfc -> deleteCache();
101 + } else if ( class_exists("c_ws_plugin__qcache_purging_routines") ) {
102 + c_ws_plugin__qcache_purging_routines::purge_cache_dir(); // quick cache
103 + } else if(file_exists(WP_CONTENT_DIR.'/wp-cache-config.php') && function_exists('prune_super_cache')){
104 + // fallback for WP-Super-Cache
105 + global $cache_path;
106 + prune_super_cache($cache_path.'supercache/',true);
107 + prune_super_cache($cache_path,true);
108 + }
109 +
110 + return true;
111 + }
112 +
113 + static function stats()
114 + {
115 + //Cache not available :(
116 + if(!autoptimizeCache::cacheavail())
117 + return 0;
94 118
95 - // add cachepurged action
96 - if (!function_exists('autoptimize_do_cachepurged_action')) {
97 - function autoptimize_do_cachepurged_action() {
98 - do_action("autoptimize_action_cachepurged");
99 - }
100 - }
101 - add_action("shutdown","autoptimize_do_cachepurged_action",11);
102 -
103 - // try to purge caching plugins cache-files?
104 - include_once(AUTOPTIMIZE_PLUGIN_DIR.'classlesses/autoptimizePageCacheFlush.php');
105 - add_action("autoptimize_action_cachepurged","autoptimize_flush_pagecache",10,0);
119 + //Count cached info
120 + $count = 0;
121 + $scan = scandir(AUTOPTIMIZE_CACHE_DIR);
122 + foreach($scan as $file)
123 + {
124 + if(!in_array($file,array('.','..')) && strpos($file,'autoptimize') !== false)
125 + {
126 + if(is_file(AUTOPTIMIZE_CACHE_DIR.$file))
127 + {
128 + if(AUTOPTIMIZE_CACHE_NOGZIP && (strpos($file,'.js') !== false || strpos($file,'.css') !== false))
129 + {
130 + $count++;
131 + }elseif(!AUTOPTIMIZE_CACHE_NOGZIP && strpos($file,'.none') !== false){
132 + $count++;
133 + }/*else{
134 + //Tricky one... it was a dir or a gzip/deflate file
135 + }*/
136 + }
137 + }
138 + }
139 +
140 + //Tell the number of instances
141 + return $count;
142 + }
143 +
144 + static function cacheavail()
145 + {
146 + if(!defined('AUTOPTIMIZE_CACHE_DIR'))
147 + {
148 + //We didn't set a cache
149 + return false;
150 + }
151 +
152 + //Check for existence
153 + if(!file_exists(AUTOPTIMIZE_CACHE_DIR))
154 + {
155 + @mkdir(AUTOPTIMIZE_CACHE_DIR,0775,true);
156 + if(!file_exists(AUTOPTIMIZE_CACHE_DIR))
157 + {
158 + //Where should we cache?
159 + return false;
160 + }
161 + }
162 +
163 + if(!is_writable(AUTOPTIMIZE_CACHE_DIR))
164 + {
165 + //How are we supposed to write?
166 + return false;
167 + }
106 168
107 - // warm cache (part of speedupper)?
108 - if ( apply_filters('autoptimize_filter_speedupper', true) ) {
109 - $warmCacheUrl = site_url()."/?ao_speedup_cachebuster=".rand(1,100000);
110 - $warmCache = @wp_remote_get($warmCacheUrl);
111 - unset($warmCache);
112 - }
113 -
114 - return true;
115 - }
116 -
117 - static function stats() {
118 - $AOstats=get_transient("autoptimize_stats");
119 -
120 - if (empty($AOstats)) {
121 - // Cache not available :(
122 - if(!autoptimizeCache::cacheavail()) {
123 - return 0;
124 - }
125 -
126 - // Count cached info
127 - $count = 0;
128 - $size = 0;
129 -
130 - // scan the cachedirs
131 - foreach (array("","js","css") as $scandirName) {
132 - $scan[$scandirName] = scandir(AUTOPTIMIZE_CACHE_DIR.$scandirName);
133 - }
134 -
135 - foreach ($scan as $scandirName=>$scanneddir) {
136 - $thisAoCacheDir=rtrim(AUTOPTIMIZE_CACHE_DIR.$scandirName,"/")."/";
137 - foreach($scanneddir as $file) {
138 - if(!in_array($file,array('.','..')) && strpos($file,AUTOPTIMIZE_CACHEFILE_PREFIX) !== false) {
139 - if(is_file($thisAoCacheDir.$file)) {
140 - if(AUTOPTIMIZE_CACHE_NOGZIP && (strpos($file,'.js') !== false || strpos($file,'.css') !== false || strpos($file,'.img') !== false || strpos($file,'.txt') !== false )) {
141 - $count++;
142 - } elseif(!AUTOPTIMIZE_CACHE_NOGZIP && strpos($file,'.none') !== false) {
143 - $count++;
144 - }
145 - $size+=filesize($thisAoCacheDir.$file);
146 - }
147 - }
148 - }
149 - }
150 - $AOstats=array($count,$size,time());
151 - if ($count>100) {
152 - set_transient("autoptimize_stats",$AOstats,HOUR_IN_SECONDS);
153 - }
154 - }
155 - // print the number of instances
156 - return $AOstats;
157 - }
158 -
159 - static function cacheavail() {
160 - if(!defined('AUTOPTIMIZE_CACHE_DIR')) {
161 - // We didn't set a cache
162 - return false;
163 - }
164 -
165 - foreach (array("","js","css") as $checkDir) {
166 - if(!autoptimizeCache::checkCacheDir(AUTOPTIMIZE_CACHE_DIR.$checkDir)) {
167 - return false;
168 - }
169 - }
170 -
171 - /** write index.html here to avoid prying eyes */
172 - $indexFile=AUTOPTIMIZE_CACHE_DIR.'/index.html';
173 - if(!is_file($indexFile)) {
174 - @file_put_contents($indexFile,'<html><head><meta name="robots" content="noindex, nofollow"></head><body>Generated by <a href="http://wordpress.org/extend/plugins/autoptimize/" rel="nofollow">Autoptimize</a></body></html>');
175 - }
176 -
177 - /** write .htaccess here to overrule wp_super_cache */
178 - $htAccess=AUTOPTIMIZE_CACHE_DIR.'/.htaccess';
179 - if(!is_file($htAccess)) {
180 - /**
181 - * create wp-content/AO_htaccess_tmpl with
182 - * whatever htaccess rules you might need
183 - * if you want to override default AO htaccess
184 - */
185 - $htaccess_tmpl=WP_CONTENT_DIR."/AO_htaccess_tmpl";
186 - if (is_file($htaccess_tmpl)) {
187 - $htAccessContent=file_get_contents($htaccess_tmpl);
188 - } else if (is_multisite() || AUTOPTIMIZE_CACHE_NOGZIP == false) {
189 - $htAccessContent='<IfModule mod_expires.c>
169 + /** write index.html here to avoid prying eyes */
170 + $indexFile=AUTOPTIMIZE_CACHE_DIR.'/index.html';
171 + if(!is_file($indexFile)) {
172 + @file_put_contents($indexFile,'<html><body>Generated by <a href="http://wordpress.org/extend/plugins/autoptimize/">Autoptimize</a></body></html>');
173 + }
174 +
175 + /** write .htaccess here to overrule wp_super_cache */
176 + $htAccess=AUTOPTIMIZE_CACHE_DIR.'/.htaccess';
177 + if(!is_file($htAccess)) {
178 + if (is_multisite() || AUTOPTIMIZE_CACHE_NOGZIP == false) {
179 + @file_put_contents($htAccess,'<IfModule mod_headers.c>
180 + Header set Vary "Accept-Encoding"
181 + Header set Cache-Control "max-age=10672000, must-revalidate"
182 +</IfModule>
183 +<IfModule mod_expires.c>
190 184 ExpiresActive On
191 185 ExpiresByType text/css A30672000
192 186 ExpiresByType text/javascript A30672000
193 187 ExpiresByType application/javascript A30672000
194 188 </IfModule>
195 -<IfModule mod_headers.c>
196 - Header append Cache-Control "public, immutable"
197 -</IfModule>
198 189 <IfModule mod_deflate.c>
199 - <FilesMatch "\.(js|css)$">
190 + <FilesMatch "\.(js|css)$">
200 191 SetOutputFilter DEFLATE
201 192 </FilesMatch>
202 193 </IfModule>
203 -<IfModule mod_authz_core.c>
204 - <Files *.php>
205 - Require all granted
206 - </Files>
207 -</IfModule>
208 -<IfModule !mod_authz_core.c>
209 - <Files *.php>
210 - Order allow,deny
194 +<Files *.php>
211 195 Allow from all
212 - </Files>
213 -</IfModule>';
214 - } else {
215 - $htAccessContent='<IfModule mod_expires.c>
216 - ExpiresActive On
217 - ExpiresByType text/css A30672000
218 - ExpiresByType text/javascript A30672000
219 - ExpiresByType application/javascript A30672000
196 +</Files>');
197 + } else {
198 + @file_put_contents($htAccess,'<IfModule mod_headers.c>
199 + Header set Vary "Accept-Encoding"
200 + Header set Cache-Control "max-age=10672000, must-revalidate"
220 201 </IfModule>
221 -<IfModule mod_headers.c>
222 - Header append Cache-Control "public, immutable"
202 +<IfModule mod_expires.c>
203 + ExpiresActive On
204 + ExpiresByType text/css A30672000
205 + ExpiresByType text/javascript A30672000
206 + ExpiresByType application/javascript A30672000
223 207 </IfModule>
224 208 <IfModule mod_deflate.c>
225 - <FilesMatch "\.(js|css)$">
209 + <FilesMatch "\.(js|css)$">
226 210 SetOutputFilter DEFLATE
227 211 </FilesMatch>
228 212 </IfModule>
229 -<IfModule mod_authz_core.c>
230 - <Files *.php>
231 - Require all denied
232 - </Files>
233 -</IfModule>
234 -<IfModule !mod_authz_core.c>
235 - <Files *.php>
236 - Order deny,allow
213 +<Files *.php>
237 214 Deny from all
238 - </Files>
239 -</IfModule>';
240 - }
241 - @file_put_contents($htAccess,$htAccessContent);
242 - }
243 -
244 - // All OK
245 - return true;
246 - }
247 -
248 - static function checkCacheDir($dir) {
249 - // Check and create if not exists
250 - if(!file_exists($dir)) {
251 - @mkdir($dir,0775,true);
252 - if(!file_exists($dir)) {
253 - return false;
254 - }
255 - }
256 -
257 - // check if we can now write
258 - if(!is_writable($dir)) {
259 - return false;
260 - }
261 -
262 - // and write index.html here to avoid prying eyes
263 - $indexFile=$dir.'/index.html';
264 - if(!is_file($indexFile)) {
265 - @file_put_contents($indexFile,'<html><head><meta name="robots" content="noindex, nofollow"></head><body>Generated by <a href="http://wordpress.org/extend/plugins/autoptimize/" rel="nofollow">Autoptimize</a></body></html>');
266 - }
267 -
268 - return true;
269 - }
215 +</Files>');
216 + }
217 + }
218 + //All OK
219 + return true;
220 + }
270 221 }