Version Description
- Update getting wp-config.php if one level above installation (#106)
- Add clear types for strict cache clearing (#110)
- Fix advanced cache settings recognition for subdirectory multisite networks
- Fix WP-CLI clear command for post IDs (#110)
- Fix scheme-based caching for NGINX/PHP-FPM (#109)
- Fix trailing slash handling
Download this release
Release Info
| Developer | keycdn |
| Plugin | |
| Version | 1.4.7 |
| Comparing to | |
| See all releases | |
Code changes from version 1.4.6 to 1.4.7
- advanced-cache.php +16 -10
- cache-enabler.php +1 -1
- inc/cache_enabler.class.php +87 -71
- inc/cache_enabler_disk.class.php +64 -50
- readme.txt +8 -0
advanced-cache.php
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
* Cache Enabler advanced cache
|
| 4 |
*
|
| 5 |
* @since 1.2.0
|
| 6 |
-
* @change 1.4.
|
| 7 |
*/
|
| 8 |
|
| 9 |
// check if request method is GET
|
|
@@ -12,10 +12,10 @@ if ( ! isset( $_SERVER['REQUEST_METHOD'] ) || $_SERVER['REQUEST_METHOD'] !== 'GE
|
|
| 12 |
}
|
| 13 |
|
| 14 |
// base path
|
| 15 |
-
$path =
|
| 16 |
|
| 17 |
// scheme
|
| 18 |
-
$scheme = ( ( isset( $_SERVER['HTTPS'] ) &&
|
| 19 |
|
| 20 |
// path to cached variants
|
| 21 |
$path_html = $path . $scheme . '-index.html';
|
|
@@ -152,8 +152,8 @@ readfile( $path_html );
|
|
| 152 |
exit;
|
| 153 |
|
| 154 |
|
| 155 |
-
//
|
| 156 |
-
function
|
| 157 |
|
| 158 |
$path = sprintf(
|
| 159 |
'%s%s%s%s',
|
|
@@ -164,12 +164,12 @@ function _ce_file_path( $path = null ) {
|
|
| 164 |
PHP_URL_HOST
|
| 165 |
),
|
| 166 |
parse_url(
|
| 167 |
-
|
| 168 |
PHP_URL_PATH
|
| 169 |
)
|
| 170 |
);
|
| 171 |
|
| 172 |
-
if ( is_file( $path )
|
| 173 |
header( $_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found', true, 404 );
|
| 174 |
exit;
|
| 175 |
}
|
|
@@ -182,11 +182,17 @@ function _ce_file_path( $path = null ) {
|
|
| 182 |
|
| 183 |
// get blog path
|
| 184 |
function _get_blog_path() {
|
| 185 |
-
$path = $_SERVER['REQUEST_URI'];
|
| 186 |
|
| 187 |
-
|
|
|
|
|
|
|
| 188 |
|
| 189 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 190 |
}
|
| 191 |
|
| 192 |
// read settings file
|
| 3 |
* Cache Enabler advanced cache
|
| 4 |
*
|
| 5 |
* @since 1.2.0
|
| 6 |
+
* @change 1.4.7
|
| 7 |
*/
|
| 8 |
|
| 9 |
// check if request method is GET
|
| 12 |
}
|
| 13 |
|
| 14 |
// base path
|
| 15 |
+
$path = _file_path();
|
| 16 |
|
| 17 |
// scheme
|
| 18 |
+
$scheme = ( ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' ) || $_SERVER['SERVER_PORT'] === '443' ) ? 'https' : 'http';
|
| 19 |
|
| 20 |
// path to cached variants
|
| 21 |
$path_html = $path . $scheme . '-index.html';
|
| 152 |
exit;
|
| 153 |
|
| 154 |
|
| 155 |
+
// get cached file path
|
| 156 |
+
function _file_path() {
|
| 157 |
|
| 158 |
$path = sprintf(
|
| 159 |
'%s%s%s%s',
|
| 164 |
PHP_URL_HOST
|
| 165 |
),
|
| 166 |
parse_url(
|
| 167 |
+
$_SERVER['REQUEST_URI'],
|
| 168 |
PHP_URL_PATH
|
| 169 |
)
|
| 170 |
);
|
| 171 |
|
| 172 |
+
if ( is_file( $path ) ) {
|
| 173 |
header( $_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found', true, 404 );
|
| 174 |
exit;
|
| 175 |
}
|
| 182 |
|
| 183 |
// get blog path
|
| 184 |
function _get_blog_path() {
|
|
|
|
| 185 |
|
| 186 |
+
// get blog path
|
| 187 |
+
$path = explode( '/', $_SERVER['REQUEST_URI'], 3 );
|
| 188 |
+
$path = $path[1];
|
| 189 |
|
| 190 |
+
// check if blog path is empty
|
| 191 |
+
if ( ! empty( $path ) ) {
|
| 192 |
+
$path = '-' . $path;
|
| 193 |
+
}
|
| 194 |
+
|
| 195 |
+
return $path;
|
| 196 |
}
|
| 197 |
|
| 198 |
// read settings file
|
cache-enabler.php
CHANGED
|
@@ -6,7 +6,7 @@ Description: Simple and fast WordPress disk caching plugin.
|
|
| 6 |
Author: KeyCDN
|
| 7 |
Author URI: https://www.keycdn.com
|
| 8 |
License: GPLv2 or later
|
| 9 |
-
Version: 1.4.
|
| 10 |
*/
|
| 11 |
|
| 12 |
/*
|
| 6 |
Author: KeyCDN
|
| 7 |
Author URI: https://www.keycdn.com
|
| 8 |
License: GPLv2 or later
|
| 9 |
+
Version: 1.4.7
|
| 10 |
*/
|
| 11 |
|
| 12 |
/*
|
inc/cache_enabler.class.php
CHANGED
|
@@ -445,19 +445,25 @@ final class Cache_Enabler {
|
|
| 445 |
* set or unset WP_CACHE constant
|
| 446 |
*
|
| 447 |
* @since 1.1.1
|
| 448 |
-
* @change 1.4.
|
| 449 |
*
|
| 450 |
* @param boolean $wp_cache_value true to set WP_CACHE constant in wp-config.php, false to unset
|
| 451 |
*/
|
| 452 |
|
| 453 |
private static function _set_wp_cache( $wp_cache_value = true ) {
|
| 454 |
|
| 455 |
-
// get
|
| 456 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 457 |
|
| 458 |
-
// check if
|
| 459 |
-
if (
|
| 460 |
-
// get
|
| 461 |
$wp_config = file( $wp_config_file );
|
| 462 |
|
| 463 |
// set Cache Enabler line
|
|
@@ -489,7 +495,7 @@ final class Cache_Enabler {
|
|
| 489 |
array_unshift( $wp_config, "<?php\r\n", $wp_cache_ce_line );
|
| 490 |
}
|
| 491 |
|
| 492 |
-
// write
|
| 493 |
$fh = @fopen( $wp_config_file, 'w' );
|
| 494 |
foreach( $wp_config as $ln ) {
|
| 495 |
@fwrite( $fh, $ln );
|
|
@@ -1218,16 +1224,26 @@ final class Cache_Enabler {
|
|
| 1218 |
* clear page cache by post ID
|
| 1219 |
*
|
| 1220 |
* @since 1.0.0
|
| 1221 |
-
* @change 1.4.
|
| 1222 |
*
|
| 1223 |
-
* @param integer $post_id post ID
|
| 1224 |
*/
|
| 1225 |
|
| 1226 |
public static function clear_page_cache_by_post_id( $post_id ) {
|
| 1227 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1228 |
// validate integer
|
| 1229 |
if ( ! is_int( $post_id ) ) {
|
| 1230 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1231 |
}
|
| 1232 |
|
| 1233 |
// clear page cache
|
|
@@ -1239,36 +1255,29 @@ final class Cache_Enabler {
|
|
| 1239 |
* clear page cache by URL
|
| 1240 |
*
|
| 1241 |
* @since 1.0.0
|
| 1242 |
-
* @change 1.4.
|
| 1243 |
*
|
| 1244 |
-
* @param
|
|
|
|
| 1245 |
*/
|
| 1246 |
|
| 1247 |
-
public static function clear_page_cache_by_url( $
|
| 1248 |
|
| 1249 |
-
//
|
| 1250 |
-
if (
|
| 1251 |
return;
|
| 1252 |
}
|
| 1253 |
|
| 1254 |
-
//
|
| 1255 |
-
|
| 1256 |
-
|
| 1257 |
-
// check if URL is the home page
|
| 1258 |
-
if ( $url === $home_page_url ) {
|
| 1259 |
-
self::clear_home_page_cache();
|
| 1260 |
-
} else {
|
| 1261 |
-
call_user_func(
|
| 1262 |
-
array(
|
| 1263 |
-
self::$disk,
|
| 1264 |
-
'delete_asset',
|
| 1265 |
-
),
|
| 1266 |
-
$url
|
| 1267 |
-
);
|
| 1268 |
}
|
| 1269 |
|
|
|
|
|
|
|
|
|
|
| 1270 |
// clear cache by URL post hook
|
| 1271 |
-
do_action( 'ce_action_cache_by_url_cleared' );
|
| 1272 |
}
|
| 1273 |
|
| 1274 |
|
|
@@ -1276,17 +1285,13 @@ final class Cache_Enabler {
|
|
| 1276 |
* clear home page cache
|
| 1277 |
*
|
| 1278 |
* @since 1.0.7
|
| 1279 |
-
* @change 1.
|
| 1280 |
*/
|
| 1281 |
|
| 1282 |
public static function clear_home_page_cache() {
|
| 1283 |
|
| 1284 |
-
|
| 1285 |
-
|
| 1286 |
-
self::$disk,
|
| 1287 |
-
'clear_home',
|
| 1288 |
-
)
|
| 1289 |
-
);
|
| 1290 |
|
| 1291 |
// clear home page cache post hook
|
| 1292 |
do_action( 'ce_action_home_page_cache_cleared' );
|
|
@@ -1297,9 +1302,9 @@ final class Cache_Enabler {
|
|
| 1297 |
* clear blog ID cache
|
| 1298 |
*
|
| 1299 |
* @since 1.4.0
|
| 1300 |
-
* @change 1.4.
|
| 1301 |
*
|
| 1302 |
-
* @param integer $blog_id blog ID
|
| 1303 |
*/
|
| 1304 |
|
| 1305 |
public static function clear_blog_id_cache( $blog_id ) {
|
|
@@ -1311,7 +1316,12 @@ final class Cache_Enabler {
|
|
| 1311 |
|
| 1312 |
// validate integer
|
| 1313 |
if ( ! is_int( $blog_id ) ) {
|
| 1314 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1315 |
}
|
| 1316 |
|
| 1317 |
// set clear URL
|
|
@@ -1320,7 +1330,7 @@ final class Cache_Enabler {
|
|
| 1320 |
// network with subdomain configuration
|
| 1321 |
if ( is_subdomain_install() ) {
|
| 1322 |
// clear main site or subsite cache
|
| 1323 |
-
self::clear_page_cache_by_url( $clear_url );
|
| 1324 |
// network with subdirectory configuration
|
| 1325 |
} else {
|
| 1326 |
// get blog path
|
|
@@ -1344,7 +1354,7 @@ final class Cache_Enabler {
|
|
| 1344 |
// if cached page belongs to main site
|
| 1345 |
if ( ! in_array( $page_path, $blog_paths ) ) {
|
| 1346 |
// clear page cache
|
| 1347 |
-
self::clear_page_cache_by_url( $clear_url . $page_path );
|
| 1348 |
}
|
| 1349 |
}
|
| 1350 |
|
|
@@ -1353,7 +1363,7 @@ final class Cache_Enabler {
|
|
| 1353 |
// subsite
|
| 1354 |
} else {
|
| 1355 |
// clear subsite cache
|
| 1356 |
-
self::clear_page_cache_by_url( $clear_url );
|
| 1357 |
}
|
| 1358 |
}
|
| 1359 |
}
|
|
@@ -1412,6 +1422,33 @@ final class Cache_Enabler {
|
|
| 1412 |
}
|
| 1413 |
|
| 1414 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1415 |
/**
|
| 1416 |
* check if mobile
|
| 1417 |
*
|
|
@@ -1457,7 +1494,7 @@ final class Cache_Enabler {
|
|
| 1457 |
* check to bypass the cache
|
| 1458 |
*
|
| 1459 |
* @since 1.0.0
|
| 1460 |
-
* @change 1.4.
|
| 1461 |
*
|
| 1462 |
* @return boolean true if exception, false otherwise
|
| 1463 |
*
|
|
@@ -1482,7 +1519,7 @@ final class Cache_Enabler {
|
|
| 1482 |
}
|
| 1483 |
|
| 1484 |
// check conditional tags
|
| 1485 |
-
if ( self::_is_wp_cache_disabled() || self::_is_index() ||
|
| 1486 |
return true;
|
| 1487 |
}
|
| 1488 |
|
|
@@ -1678,7 +1715,7 @@ final class Cache_Enabler {
|
|
| 1678 |
|
| 1679 |
public static function set_cache( $data ) {
|
| 1680 |
|
| 1681 |
-
// check if empty
|
| 1682 |
if ( empty( $data ) ) {
|
| 1683 |
return '';
|
| 1684 |
}
|
|
@@ -1686,13 +1723,7 @@ final class Cache_Enabler {
|
|
| 1686 |
$data = apply_filters( 'cache_enabler_before_store', $data );
|
| 1687 |
|
| 1688 |
// store as asset
|
| 1689 |
-
call_user_func(
|
| 1690 |
-
array(
|
| 1691 |
-
self::$disk,
|
| 1692 |
-
'store_asset',
|
| 1693 |
-
),
|
| 1694 |
-
self::_minify_cache( $data )
|
| 1695 |
-
);
|
| 1696 |
|
| 1697 |
return $data;
|
| 1698 |
}
|
|
@@ -1713,12 +1744,7 @@ final class Cache_Enabler {
|
|
| 1713 |
}
|
| 1714 |
|
| 1715 |
// get asset cache status
|
| 1716 |
-
$cached = call_user_func(
|
| 1717 |
-
array(
|
| 1718 |
-
self::$disk,
|
| 1719 |
-
'check_asset',
|
| 1720 |
-
)
|
| 1721 |
-
);
|
| 1722 |
|
| 1723 |
// check if cache is empty
|
| 1724 |
if ( empty( $cached ) ) {
|
|
@@ -1727,12 +1753,7 @@ final class Cache_Enabler {
|
|
| 1727 |
}
|
| 1728 |
|
| 1729 |
// get cache expiry status
|
| 1730 |
-
$expired = call_user_func(
|
| 1731 |
-
array(
|
| 1732 |
-
self::$disk,
|
| 1733 |
-
'check_expiry',
|
| 1734 |
-
)
|
| 1735 |
-
);
|
| 1736 |
|
| 1737 |
// check if cache has expired
|
| 1738 |
if ( $expired ) {
|
|
@@ -1741,12 +1762,7 @@ final class Cache_Enabler {
|
|
| 1741 |
}
|
| 1742 |
|
| 1743 |
// return cached asset
|
| 1744 |
-
call_user_func(
|
| 1745 |
-
array(
|
| 1746 |
-
self::$disk,
|
| 1747 |
-
'get_asset',
|
| 1748 |
-
)
|
| 1749 |
-
);
|
| 1750 |
}
|
| 1751 |
|
| 1752 |
|
| 445 |
* set or unset WP_CACHE constant
|
| 446 |
*
|
| 447 |
* @since 1.1.1
|
| 448 |
+
* @change 1.4.7
|
| 449 |
*
|
| 450 |
* @param boolean $wp_cache_value true to set WP_CACHE constant in wp-config.php, false to unset
|
| 451 |
*/
|
| 452 |
|
| 453 |
private static function _set_wp_cache( $wp_cache_value = true ) {
|
| 454 |
|
| 455 |
+
// get config file
|
| 456 |
+
if ( file_exists( ABSPATH . 'wp-config.php' ) ) {
|
| 457 |
+
// config file resides in ABSPATH
|
| 458 |
+
$wp_config_file = ABSPATH . 'wp-config.php';
|
| 459 |
+
} elseif ( @file_exists( dirname( ABSPATH ) . '/wp-config.php' ) && ! @file_exists( dirname( ABSPATH ) . '/wp-settings.php' ) ) {
|
| 460 |
+
// config file resides one level above ABSPATH but is not part of another installation
|
| 461 |
+
$wp_config_file = dirname( ABSPATH ) . '/wp-config.php';
|
| 462 |
+
}
|
| 463 |
|
| 464 |
+
// check if config file can be written to
|
| 465 |
+
if ( is_writable( $wp_config_file ) ) {
|
| 466 |
+
// get config file as array
|
| 467 |
$wp_config = file( $wp_config_file );
|
| 468 |
|
| 469 |
// set Cache Enabler line
|
| 495 |
array_unshift( $wp_config, "<?php\r\n", $wp_cache_ce_line );
|
| 496 |
}
|
| 497 |
|
| 498 |
+
// write config file
|
| 499 |
$fh = @fopen( $wp_config_file, 'w' );
|
| 500 |
foreach( $wp_config as $ln ) {
|
| 501 |
@fwrite( $fh, $ln );
|
| 1224 |
* clear page cache by post ID
|
| 1225 |
*
|
| 1226 |
* @since 1.0.0
|
| 1227 |
+
* @change 1.4.7
|
| 1228 |
*
|
| 1229 |
+
* @param integer|string $post_id post ID
|
| 1230 |
*/
|
| 1231 |
|
| 1232 |
public static function clear_page_cache_by_post_id( $post_id ) {
|
| 1233 |
|
| 1234 |
+
// check if post ID is empty
|
| 1235 |
+
if ( empty( $post_id ) ) {
|
| 1236 |
+
return;
|
| 1237 |
+
}
|
| 1238 |
+
|
| 1239 |
// validate integer
|
| 1240 |
if ( ! is_int( $post_id ) ) {
|
| 1241 |
+
// if string try to convert to integer
|
| 1242 |
+
$post_id = (int) $post_id;
|
| 1243 |
+
// conversion failed
|
| 1244 |
+
if ( ! $post_id ) {
|
| 1245 |
+
return;
|
| 1246 |
+
}
|
| 1247 |
}
|
| 1248 |
|
| 1249 |
// clear page cache
|
| 1255 |
* clear page cache by URL
|
| 1256 |
*
|
| 1257 |
* @since 1.0.0
|
| 1258 |
+
* @change 1.4.7
|
| 1259 |
*
|
| 1260 |
+
* @param string $clear_url full or relative URL of a page
|
| 1261 |
+
* @param string $clear_type clear all specific `page` variants or the entire `dir`
|
| 1262 |
*/
|
| 1263 |
|
| 1264 |
+
public static function clear_page_cache_by_url( $clear_url, $clear_type = 'page' ) {
|
| 1265 |
|
| 1266 |
+
// check if clear URL is empty
|
| 1267 |
+
if ( empty( $clear_url ) ) {
|
| 1268 |
return;
|
| 1269 |
}
|
| 1270 |
|
| 1271 |
+
// validate string
|
| 1272 |
+
if ( ! is_string( $clear_url ) ) {
|
| 1273 |
+
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1274 |
}
|
| 1275 |
|
| 1276 |
+
// clear URL
|
| 1277 |
+
call_user_func( array( self::$disk, 'delete_asset' ), $clear_url, $clear_type );
|
| 1278 |
+
|
| 1279 |
// clear cache by URL post hook
|
| 1280 |
+
do_action( 'ce_action_cache_by_url_cleared', $clear_url );
|
| 1281 |
}
|
| 1282 |
|
| 1283 |
|
| 1285 |
* clear home page cache
|
| 1286 |
*
|
| 1287 |
* @since 1.0.7
|
| 1288 |
+
* @change 1.4.7
|
| 1289 |
*/
|
| 1290 |
|
| 1291 |
public static function clear_home_page_cache() {
|
| 1292 |
|
| 1293 |
+
// clear home page cache
|
| 1294 |
+
self::clear_page_cache_by_url( get_site_url() );
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1295 |
|
| 1296 |
// clear home page cache post hook
|
| 1297 |
do_action( 'ce_action_home_page_cache_cleared' );
|
| 1302 |
* clear blog ID cache
|
| 1303 |
*
|
| 1304 |
* @since 1.4.0
|
| 1305 |
+
* @change 1.4.7
|
| 1306 |
*
|
| 1307 |
+
* @param integer|string $blog_id blog ID
|
| 1308 |
*/
|
| 1309 |
|
| 1310 |
public static function clear_blog_id_cache( $blog_id ) {
|
| 1316 |
|
| 1317 |
// validate integer
|
| 1318 |
if ( ! is_int( $blog_id ) ) {
|
| 1319 |
+
// if string try to convert to integer
|
| 1320 |
+
$blog_id = (int) $blog_id;
|
| 1321 |
+
// conversion failed
|
| 1322 |
+
if ( ! $blog_id ) {
|
| 1323 |
+
return;
|
| 1324 |
+
}
|
| 1325 |
}
|
| 1326 |
|
| 1327 |
// set clear URL
|
| 1330 |
// network with subdomain configuration
|
| 1331 |
if ( is_subdomain_install() ) {
|
| 1332 |
// clear main site or subsite cache
|
| 1333 |
+
self::clear_page_cache_by_url( $clear_url, 'dir' );
|
| 1334 |
// network with subdirectory configuration
|
| 1335 |
} else {
|
| 1336 |
// get blog path
|
| 1354 |
// if cached page belongs to main site
|
| 1355 |
if ( ! in_array( $page_path, $blog_paths ) ) {
|
| 1356 |
// clear page cache
|
| 1357 |
+
self::clear_page_cache_by_url( $clear_url . $page_path, 'dir' );
|
| 1358 |
}
|
| 1359 |
}
|
| 1360 |
|
| 1363 |
// subsite
|
| 1364 |
} else {
|
| 1365 |
// clear subsite cache
|
| 1366 |
+
self::clear_page_cache_by_url( $clear_url, 'dir' );
|
| 1367 |
}
|
| 1368 |
}
|
| 1369 |
}
|
| 1422 |
}
|
| 1423 |
|
| 1424 |
|
| 1425 |
+
|
| 1426 |
+
|
| 1427 |
+
/**
|
| 1428 |
+
* check if trailing slash redirect
|
| 1429 |
+
*
|
| 1430 |
+
* @since 1.4.7
|
| 1431 |
+
* @change 1.4.7
|
| 1432 |
+
*
|
| 1433 |
+
* @return boolean true if a redirect is required, false otherwise
|
| 1434 |
+
*/
|
| 1435 |
+
|
| 1436 |
+
private static function _is_trailing_slash_redirect() {
|
| 1437 |
+
|
| 1438 |
+
// check if trailing slash is set and missing
|
| 1439 |
+
if ( self::permalink_structure_has_trailing_slash() ) {
|
| 1440 |
+
if ( ! preg_match( '/\/(|\?.*)$/', $_SERVER['REQUEST_URI'] ) ) {
|
| 1441 |
+
return true;
|
| 1442 |
+
}
|
| 1443 |
+
// if trailing slash is not set and appended
|
| 1444 |
+
} elseif ( preg_match( '/(?!^)\/(|\?.*)$/', $_SERVER['REQUEST_URI'] ) ) {
|
| 1445 |
+
return true;
|
| 1446 |
+
}
|
| 1447 |
+
|
| 1448 |
+
return false;
|
| 1449 |
+
}
|
| 1450 |
+
|
| 1451 |
+
|
| 1452 |
/**
|
| 1453 |
* check if mobile
|
| 1454 |
*
|
| 1494 |
* check to bypass the cache
|
| 1495 |
*
|
| 1496 |
* @since 1.0.0
|
| 1497 |
+
* @change 1.4.7
|
| 1498 |
*
|
| 1499 |
* @return boolean true if exception, false otherwise
|
| 1500 |
*
|
| 1519 |
}
|
| 1520 |
|
| 1521 |
// check conditional tags
|
| 1522 |
+
if ( self::_is_wp_cache_disabled() || self::_is_index() || self::_is_sitemap() || self::_is_trailing_slash_redirect() || is_search() || is_feed() || is_trackback() || is_robots() || is_preview() || post_password_required() ) {
|
| 1523 |
return true;
|
| 1524 |
}
|
| 1525 |
|
| 1715 |
|
| 1716 |
public static function set_cache( $data ) {
|
| 1717 |
|
| 1718 |
+
// check if page is empty
|
| 1719 |
if ( empty( $data ) ) {
|
| 1720 |
return '';
|
| 1721 |
}
|
| 1723 |
$data = apply_filters( 'cache_enabler_before_store', $data );
|
| 1724 |
|
| 1725 |
// store as asset
|
| 1726 |
+
call_user_func( array( self::$disk, 'store_asset' ), self::_minify_cache( $data ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1727 |
|
| 1728 |
return $data;
|
| 1729 |
}
|
| 1744 |
}
|
| 1745 |
|
| 1746 |
// get asset cache status
|
| 1747 |
+
$cached = call_user_func( array( self::$disk, 'check_asset' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1748 |
|
| 1749 |
// check if cache is empty
|
| 1750 |
if ( empty( $cached ) ) {
|
| 1753 |
}
|
| 1754 |
|
| 1755 |
// get cache expiry status
|
| 1756 |
+
$expired = call_user_func( array( self::$disk, 'check_expiry' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1757 |
|
| 1758 |
// check if cache has expired
|
| 1759 |
if ( $expired ) {
|
| 1762 |
}
|
| 1763 |
|
| 1764 |
// return cached asset
|
| 1765 |
+
call_user_func( array( self::$disk, 'get_asset' ) );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1766 |
}
|
| 1767 |
|
| 1768 |
|
inc/cache_enabler_disk.class.php
CHANGED
|
@@ -116,20 +116,27 @@ final class Cache_Enabler_Disk {
|
|
| 116 |
* delete asset
|
| 117 |
*
|
| 118 |
* @since 1.0.0
|
| 119 |
-
* @change 1.
|
| 120 |
*
|
| 121 |
-
* @param string $
|
|
|
|
| 122 |
*/
|
| 123 |
|
| 124 |
-
public static function delete_asset( $
|
| 125 |
|
| 126 |
-
//
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
|
|
|
| 130 |
|
| 131 |
-
//
|
| 132 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 133 |
}
|
| 134 |
|
| 135 |
|
|
@@ -147,27 +154,6 @@ final class Cache_Enabler_Disk {
|
|
| 147 |
}
|
| 148 |
|
| 149 |
|
| 150 |
-
/**
|
| 151 |
-
* clear home cache
|
| 152 |
-
*
|
| 153 |
-
* @since 1.0.7
|
| 154 |
-
* @change 1.4.0
|
| 155 |
-
*/
|
| 156 |
-
|
| 157 |
-
public static function clear_home() {
|
| 158 |
-
|
| 159 |
-
$path = sprintf(
|
| 160 |
-
'%s%s%s%s',
|
| 161 |
-
CE_CACHE_DIR,
|
| 162 |
-
DIRECTORY_SEPARATOR,
|
| 163 |
-
preg_replace( '#^https?://#', '', get_option( 'siteurl' ) ),
|
| 164 |
-
DIRECTORY_SEPARATOR
|
| 165 |
-
);
|
| 166 |
-
|
| 167 |
-
array_map( 'unlink', glob( $path . self::FILE_GLOB ) );
|
| 168 |
-
}
|
| 169 |
-
|
| 170 |
-
|
| 171 |
/**
|
| 172 |
* get asset
|
| 173 |
*
|
|
@@ -328,7 +314,7 @@ final class Cache_Enabler_Disk {
|
|
| 328 |
* clear directory
|
| 329 |
*
|
| 330 |
* @since 1.0.0
|
| 331 |
-
* @change 1.
|
| 332 |
*
|
| 333 |
* @param string $dir directory
|
| 334 |
*/
|
|
@@ -344,16 +330,24 @@ final class Cache_Enabler_Disk {
|
|
| 344 |
}
|
| 345 |
|
| 346 |
// get directory data
|
| 347 |
-
$
|
| 348 |
-
if( gettype( $data_dir ) === 'array' ) {
|
| 349 |
-
$objects = array_diff(
|
| 350 |
-
$data_dir,
|
| 351 |
-
array( '..', '.' )
|
| 352 |
-
);
|
| 353 |
-
}
|
| 354 |
|
| 355 |
-
// check if empty
|
| 356 |
if ( empty( $objects ) ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 357 |
return;
|
| 358 |
}
|
| 359 |
|
|
@@ -369,7 +363,7 @@ final class Cache_Enabler_Disk {
|
|
| 369 |
}
|
| 370 |
}
|
| 371 |
|
| 372 |
-
// delete
|
| 373 |
@rmdir( $dir );
|
| 374 |
|
| 375 |
// clears file status cache
|
|
@@ -389,17 +383,15 @@ final class Cache_Enabler_Disk {
|
|
| 389 |
|
| 390 |
public static function cache_size( $dir = '.' ) {
|
| 391 |
|
| 392 |
-
// check if
|
| 393 |
if ( ! is_dir( $dir ) ) {
|
| 394 |
return;
|
| 395 |
}
|
| 396 |
|
| 397 |
// get directory data
|
| 398 |
-
$objects =
|
| 399 |
-
scandir( $dir ),
|
| 400 |
-
array( '..', '.' )
|
| 401 |
-
);
|
| 402 |
|
|
|
|
| 403 |
if ( empty( $objects ) ) {
|
| 404 |
return;
|
| 405 |
}
|
|
@@ -423,10 +415,10 @@ final class Cache_Enabler_Disk {
|
|
| 423 |
|
| 424 |
|
| 425 |
/**
|
| 426 |
-
*
|
| 427 |
*
|
| 428 |
* @since 1.0.0
|
| 429 |
-
* @change 1.4.
|
| 430 |
*
|
| 431 |
* @param string $path URI or permalink
|
| 432 |
* @return string $diff path to cached file
|
|
@@ -448,7 +440,7 @@ final class Cache_Enabler_Disk {
|
|
| 448 |
)
|
| 449 |
);
|
| 450 |
|
| 451 |
-
if ( is_file( $path )
|
| 452 |
wp_die( 'Path is not valid.' );
|
| 453 |
}
|
| 454 |
|
|
@@ -460,14 +452,14 @@ final class Cache_Enabler_Disk {
|
|
| 460 |
* get file scheme
|
| 461 |
*
|
| 462 |
* @since 1.4.0
|
| 463 |
-
* @change 1.4.
|
| 464 |
*
|
| 465 |
* @return string https or http
|
| 466 |
*/
|
| 467 |
|
| 468 |
private static function _file_scheme() {
|
| 469 |
|
| 470 |
-
return ( ( isset( $_SERVER['HTTPS'] ) &&
|
| 471 |
}
|
| 472 |
|
| 473 |
|
|
@@ -567,6 +559,28 @@ final class Cache_Enabler_Disk {
|
|
| 567 |
}
|
| 568 |
|
| 569 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 570 |
/**
|
| 571 |
* read settings file
|
| 572 |
*
|
| 116 |
* delete asset
|
| 117 |
*
|
| 118 |
* @since 1.0.0
|
| 119 |
+
* @change 1.4.7
|
| 120 |
*
|
| 121 |
+
* @param string $clear_url full or relative URL of a page
|
| 122 |
+
* @param string $clear_type if `dir` clear the entire directory
|
| 123 |
*/
|
| 124 |
|
| 125 |
+
public static function delete_asset( $clear_url, $clear_type ) {
|
| 126 |
|
| 127 |
+
// get directory
|
| 128 |
+
$dir = self::_file_path( $clear_url );
|
| 129 |
+
|
| 130 |
+
// delete all cached variants in directory
|
| 131 |
+
array_map( 'unlink', glob( $dir . self::FILE_GLOB ) );
|
| 132 |
|
| 133 |
+
// get directory data
|
| 134 |
+
$objects = self::_get_dir( $dir );
|
| 135 |
+
|
| 136 |
+
// check if directory is now empty or if it needs to be cleared anyways
|
| 137 |
+
if ( empty( $objects ) || $clear_type === 'dir' ) {
|
| 138 |
+
self::_clear_dir( $dir );
|
| 139 |
+
}
|
| 140 |
}
|
| 141 |
|
| 142 |
|
| 154 |
}
|
| 155 |
|
| 156 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 157 |
/**
|
| 158 |
* get asset
|
| 159 |
*
|
| 314 |
* clear directory
|
| 315 |
*
|
| 316 |
* @since 1.0.0
|
| 317 |
+
* @change 1.4.7
|
| 318 |
*
|
| 319 |
* @param string $dir directory
|
| 320 |
*/
|
| 330 |
}
|
| 331 |
|
| 332 |
// get directory data
|
| 333 |
+
$objects = self::_get_dir( $dir );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 334 |
|
| 335 |
+
// check if directory is empty
|
| 336 |
if ( empty( $objects ) ) {
|
| 337 |
+
// delete empty directory
|
| 338 |
+
@rmdir( $dir );
|
| 339 |
+
|
| 340 |
+
// get parent directory
|
| 341 |
+
$parent_dir = preg_replace( '/\/[^\/]+$/', '', $dir );
|
| 342 |
+
|
| 343 |
+
// get parent directory data
|
| 344 |
+
$parent_objects = self::_get_dir( $parent_dir );
|
| 345 |
+
|
| 346 |
+
// check if parent directory is also empty
|
| 347 |
+
if ( empty( $parent_objects ) ) {
|
| 348 |
+
self::_clear_dir( $parent_dir );
|
| 349 |
+
}
|
| 350 |
+
|
| 351 |
return;
|
| 352 |
}
|
| 353 |
|
| 363 |
}
|
| 364 |
}
|
| 365 |
|
| 366 |
+
// delete directory
|
| 367 |
@rmdir( $dir );
|
| 368 |
|
| 369 |
// clears file status cache
|
| 383 |
|
| 384 |
public static function cache_size( $dir = '.' ) {
|
| 385 |
|
| 386 |
+
// check if directory
|
| 387 |
if ( ! is_dir( $dir ) ) {
|
| 388 |
return;
|
| 389 |
}
|
| 390 |
|
| 391 |
// get directory data
|
| 392 |
+
$objects = self::_get_dir( $dir );
|
|
|
|
|
|
|
|
|
|
| 393 |
|
| 394 |
+
// check if empty
|
| 395 |
if ( empty( $objects ) ) {
|
| 396 |
return;
|
| 397 |
}
|
| 415 |
|
| 416 |
|
| 417 |
/**
|
| 418 |
+
* get cached file path
|
| 419 |
*
|
| 420 |
* @since 1.0.0
|
| 421 |
+
* @change 1.4.7
|
| 422 |
*
|
| 423 |
* @param string $path URI or permalink
|
| 424 |
* @return string $diff path to cached file
|
| 440 |
)
|
| 441 |
);
|
| 442 |
|
| 443 |
+
if ( is_file( $path ) ) {
|
| 444 |
wp_die( 'Path is not valid.' );
|
| 445 |
}
|
| 446 |
|
| 452 |
* get file scheme
|
| 453 |
*
|
| 454 |
* @since 1.4.0
|
| 455 |
+
* @change 1.4.7
|
| 456 |
*
|
| 457 |
* @return string https or http
|
| 458 |
*/
|
| 459 |
|
| 460 |
private static function _file_scheme() {
|
| 461 |
|
| 462 |
+
return ( ( isset( $_SERVER['HTTPS'] ) && $_SERVER['HTTPS'] !== 'off' ) || $_SERVER['SERVER_PORT'] === '443' ) ? 'https' : 'http';
|
| 463 |
}
|
| 464 |
|
| 465 |
|
| 559 |
}
|
| 560 |
|
| 561 |
|
| 562 |
+
/**
|
| 563 |
+
* get directory data
|
| 564 |
+
*
|
| 565 |
+
* @since 1.4.7
|
| 566 |
+
* @change 1.4.7
|
| 567 |
+
*
|
| 568 |
+
* @param string $dir directory path
|
| 569 |
+
* @return array $objects directory objects
|
| 570 |
+
*/
|
| 571 |
+
|
| 572 |
+
private static function _get_dir( $dir ) {
|
| 573 |
+
|
| 574 |
+
// scan directory
|
| 575 |
+
$data_dir = @scandir( $dir );
|
| 576 |
+
|
| 577 |
+
if ( is_array( $data_dir ) ) {
|
| 578 |
+
$objects = array_diff( $data_dir, array( '..', '.' ) );
|
| 579 |
+
return $objects;
|
| 580 |
+
}
|
| 581 |
+
}
|
| 582 |
+
|
| 583 |
+
|
| 584 |
/**
|
| 585 |
* read settings file
|
| 586 |
*
|
readme.txt
CHANGED
|
@@ -81,6 +81,14 @@ When combined with Optimus, the WordPress Cache Enabler allows you to easily del
|
|
| 81 |
|
| 82 |
== Changelog ==
|
| 83 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 84 |
= 1.4.6 =
|
| 85 |
* Add cache bypass method for sitemaps (#104)
|
| 86 |
* Fix cache clearing for subdirectory multisite networks (#103)
|
| 81 |
|
| 82 |
== Changelog ==
|
| 83 |
|
| 84 |
+
= 1.4.7 =
|
| 85 |
+
* Update getting wp-config.php if one level above installation (#106)
|
| 86 |
+
* Add clear types for strict cache clearing (#110)
|
| 87 |
+
* Fix advanced cache settings recognition for subdirectory multisite networks
|
| 88 |
+
* Fix WP-CLI clear command for post IDs (#110)
|
| 89 |
+
* Fix scheme-based caching for NGINX/PHP-FPM (#109)
|
| 90 |
+
* Fix trailing slash handling
|
| 91 |
+
|
| 92 |
= 1.4.6 =
|
| 93 |
* Add cache bypass method for sitemaps (#104)
|
| 94 |
* Fix cache clearing for subdirectory multisite networks (#103)
|
