PluginProbe
Autoptimize / 1.2
Autoptimize v1.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 +157 -266 2.3.11.2 View file →
@@ -1,270 +1,161 @@
1 1 <?php
2 -if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3 2
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 - }
3 +class autoptimizeCache
4 +{
5 + private $filename;
6 + private $mime;
7 + private $cachedir;
8 + private $delayed;
9 +
10 + public function __construct($md5,$ext='php')
11 + {
12 + $this->cachedir = AUTOPTIMIZE_CACHE_DIR;
13 + $this->delayed = AUTOPTIMIZE_CACHE_DELAY;
14 + $this->nogzip = AUTOPTIMIZE_CACHE_NOGZIP;
15 + if($this->nogzip == false)
16 + $this->filename = 'autoptimize_'.$md5.'.php';
17 + else
18 + $this->filename = 'autoptimize_'.$md5.'.'.$ext;
19 + }
20 +
21 + public function check()
22 + {
23 + if(!file_exists($this->cachedir.$this->filename))
24 + {
25 + //No cached file, sorry
26 + return false;
27 + }
28 + //Cache exists!
29 + return true;
30 + }
31 +
32 + public function retrieve()
33 + {
34 + if($this->check())
35 + {
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 + return false;
42 + }
43 +
44 + public function cache($code,$mime)
45 + {
46 + if($this->nogzip == false)
47 + {
48 + $file = ($this->delayed ? 'delayed.php' : 'default.php');
49 + $phpcode = file_get_contents(WP_PLUGIN_DIR.'/autoptimize/config/'.$file);
50 + $phpcode = str_replace(array('%%CONTENT%%','exit;'),array($mime,''),$phpcode);
51 + file_put_contents($this->cachedir.$this->filename,$phpcode);
52 + file_put_contents($this->cachedir.$this->filename.'.none',$code);
53 + if(!$this->delayed)
54 + {
55 + //Compress now!
56 + file_put_contents($this->cachedir.$this->filename.'.deflate',gzencode($code,9,FORCE_DEFLATE));
57 + file_put_contents($this->cachedir.$this->filename.'.gzip',gzencode($code,9,FORCE_GZIP));
58 + }
59 + }else{
60 + //Write code to cache without doing anything else
61 + file_put_contents($this->cachedir.$this->filename,$code);
62 + }
63 + }
64 +
65 + public function getname()
66 + {
67 + return $this->filename;
68 + }
69 +
70 + static function clearall()
71 + {
72 + //Cache not available :(
73 + if(!autoptimizeCache::cacheavail())
74 + return false;
75 +
76 + //Clean the cachedir
77 + $scan = scandir(AUTOPTIMIZE_CACHE_DIR);
78 + foreach($scan as $file)
79 + {
80 + if(!in_array($file,array('.','..')) && strpos($file,'autoptimize') !== false && is_file(AUTOPTIMIZE_CACHE_DIR.$file))
81 + {
82 + @unlink(AUTOPTIMIZE_CACHE_DIR.$file);
83 + }
84 + }
85 +
86 + //Do we need to clean WP Super Cache's cache files?
87 + if(function_exists('wp_cache_clear_cache'))
88 + {
89 + //Newer WP-Super-Cache
90 + //See http://ocaoimh.ie/wp-super-cache-developers/
91 + wp_cache_clear_cache();
92 + }elseif(file_exists(WP_CONTENT_DIR.'/wp-cache-config.php') && function_exists('prune_super_cache')){
93 + //Old WP-Super-Cache
94 + global $cache_path;
95 + prune_super_cache($cache_path.'supercache/',true);
96 + prune_super_cache($cache_path,true);
97 + }
98 +
99 + return true;
100 + }
101 +
102 + static function stats()
103 + {
104 + //Cache not available :(
105 + if(!autoptimizeCache::cacheavail())
106 + return 0;
91 107
92 - @unlink(AUTOPTIMIZE_CACHE_DIR."/.htaccess");
93 - delete_transient("autoptimize_stats");
94 -
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);
106 -
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, apply_filters( 'autoptimize_filter_cache_statsexpiry', 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>
190 - ExpiresActive On
191 - ExpiresByType text/css A30672000
192 - ExpiresByType text/javascript A30672000
193 - ExpiresByType application/javascript A30672000
194 -</IfModule>
195 -<IfModule mod_headers.c>
196 - Header append Cache-Control "public, immutable"
197 -</IfModule>
198 -<IfModule mod_deflate.c>
199 - <FilesMatch "\.(js|css)$">
200 - SetOutputFilter DEFLATE
201 - </FilesMatch>
202 -</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
211 - 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
220 -</IfModule>
221 -<IfModule mod_headers.c>
222 - Header append Cache-Control "public, immutable"
223 -</IfModule>
224 -<IfModule mod_deflate.c>
225 - <FilesMatch "\.(js|css)$">
226 - SetOutputFilter DEFLATE
227 - </FilesMatch>
228 -</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
237 - 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 - }
108 + //Count cached info
109 + $count = 0;
110 + $scan = scandir(AUTOPTIMIZE_CACHE_DIR);
111 + foreach($scan as $file)
112 + {
113 + if(!in_array($file,array('.','..')) && strpos($file,'autoptimize') !== false)
114 + {
115 + if(is_file(AUTOPTIMIZE_CACHE_DIR.$file))
116 + {
117 + if(AUTOPTIMIZE_CACHE_NOGZIP && (strpos($file,'.js') !== false || strpos($file,'.css') !== false))
118 + {
119 + $count++;
120 + }elseif(!AUTOPTIMIZE_CACHE_NOGZIP && strpos($file,'.none') !== false){
121 + $count++;
122 + }/*else{
123 + //Tricky one... it was a dir or a gzip/deflate file
124 + }*/
125 + }
126 + }
127 + }
128 +
129 + //Tell the number of instances
130 + return $count;
131 + }
132 +
133 + static function cacheavail()
134 + {
135 + if(!defined('AUTOPTIMIZE_CACHE_DIR'))
136 + {
137 + //We didn't set a cache
138 + return false;
139 + }
140 +
141 + //Check for existence
142 + if(!file_exists(AUTOPTIMIZE_CACHE_DIR))
143 + {
144 + @mkdir(AUTOPTIMIZE_CACHE_DIR,0775,true);
145 + if(!file_exists(AUTOPTIMIZE_CACHE_DIR))
146 + {
147 + //Where should we cache?
148 + return false;
149 + }
150 + }
151 +
152 + if(!is_writable(AUTOPTIMIZE_CACHE_DIR))
153 + {
154 + //How are we supposed to write?
155 + return false;
156 + }
157 +
158 + //All OK
159 + return true;
160 + }
270 161 }