version 1.5.0 with APCu
This commit is contained in:
parent
58fcf95b9a
commit
6e4d474796
4 changed files with 120 additions and 19 deletions
41
readme.txt
41
readme.txt
|
@ -3,12 +3,12 @@ Contributors: cadeyrn
|
||||||
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=XU3DG7LLA76WC
|
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=XU3DG7LLA76WC
|
||||||
Tags: cache, page cache, full page cache, nginx, memcached, apc, speed
|
Tags: cache, page cache, full page cache, nginx, memcached, apc, speed
|
||||||
Requires at least: 3.0
|
Requires at least: 3.0
|
||||||
Tested up to: 3.9
|
Tested up to: 3.9.1
|
||||||
Stable tag: 1.4.0
|
Stable tag: 1.5.0
|
||||||
License: GPLv3
|
License: GPLv3
|
||||||
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
||||||
|
|
||||||
The fastest way to cache: full page in memory cache for WordPress!
|
The fastest way to cache: use the memory!
|
||||||
|
|
||||||
== Description ==
|
== Description ==
|
||||||
WP-FFPC ( WordPress Fast Full Page Cache ) is a cache plugin for [WordPress](http://wordpress.org/ "WordPress"). It works with any webserver, including apache2, lighttpd, nginx.
|
WP-FFPC ( WordPress Fast Full Page Cache ) is a cache plugin for [WordPress](http://wordpress.org/ "WordPress"). It works with any webserver, including apache2, lighttpd, nginx.
|
||||||
|
@ -16,12 +16,14 @@ It can be configured to join forces with [NGiNX](http://NGiNX.org "NGiNX")'s bui
|
||||||
|
|
||||||
= Features: =
|
= Features: =
|
||||||
* Wordpress Network support
|
* Wordpress Network support
|
||||||
* fully supported domain/subdomain Networks
|
* fully supported domain/subdomain based WordPress Networks on per site setup as well
|
||||||
* will work in Network Enabled mode only for subdirectory based Multisites ( no per site setting possibility )
|
* will work in Network Enabled mode only for subdirectory based Multisites ( no per site setting possibility )
|
||||||
* supports variable backends
|
* supports variable backends
|
||||||
* memcached with PHP Memcached
|
* memcached with [PHP Memcached](http://php.net/manual/en/book.memcached.php "Memcached")
|
||||||
* memcached with PHP Memcache
|
* memcached with [PHP Memcache](http://php.net/manual/en/book.memcache.php "Memcache")
|
||||||
* APC
|
* [APC](http://php.net/manual/en/book.apc.php "APC")
|
||||||
|
* [APCu](http://pecl.php.net/package/APCu "APC User Cache")
|
||||||
|
* [Xcache](http://xcache.lighttpd.net/ "Xcache") - not stable yet, volunteer testers required!
|
||||||
* cache exclude possibilities ( home, feeds, archieves, pages, singles )
|
* cache exclude possibilities ( home, feeds, archieves, pages, singles )
|
||||||
* (optional) cache for logged-in users
|
* (optional) cache for logged-in users
|
||||||
* 404 caching
|
* 404 caching
|
||||||
|
@ -33,7 +35,7 @@ It can be configured to join forces with [NGiNX](http://NGiNX.org "NGiNX")'s bui
|
||||||
* multiple memcached upstream support
|
* multiple memcached upstream support
|
||||||
* precache ( manually or by timed by wp-cron )
|
* precache ( manually or by timed by wp-cron )
|
||||||
|
|
||||||
Many thanks for contributors, supporters, testers & bug reporters:
|
Many thanks for donations, contributors, supporters, testers & bug reporters:
|
||||||
|
|
||||||
* [Harold Kyle](https://github.com/haroldkyle "Harold Kyle")
|
* [Harold Kyle](https://github.com/haroldkyle "Harold Kyle")
|
||||||
* [Eric Gilette](http://www.ericgillette.com/ "Eric Gilette")
|
* [Eric Gilette](http://www.ericgillette.com/ "Eric Gilette")
|
||||||
|
@ -69,10 +71,11 @@ From version 1.0, the plugin supports subdomain based WordPress Network with pos
|
||||||
|
|
||||||
and **at least one** of the following for storage backend:
|
and **at least one** of the following for storage backend:
|
||||||
|
|
||||||
* PHP APC
|
* memcached with [PHP Memcached](http://php.net/manual/en/book.memcached.php "Memcached") > 0.1.0
|
||||||
* PHP Memcached > 0.1.0
|
* memcached with [PHP Memcache](http://php.net/manual/en/book.memcache.php "Memcache") > 2.1.0
|
||||||
* PHP Memcache > 2.1.0
|
* [APC](http://php.net/manual/en/book.apc.php "APC")
|
||||||
* Xcache
|
* [APCu](http://pecl.php.net/package/APCu "APC User Cache")
|
||||||
|
* [Xcache](http://xcache.lighttpd.net/ "Xcache")
|
||||||
|
|
||||||
= How logging works in the plugin? =
|
= How logging works in the plugin? =
|
||||||
Log levels by default ( if logging enabled ) includes warning and error level standard PHP messages.
|
Log levels by default ( if logging enabled ) includes warning and error level standard PHP messages.
|
||||||
|
@ -95,12 +98,22 @@ Please post feature requests to [WP-FFPC feature request topic](http://wordpress
|
||||||
|
|
||||||
== Changelog ==
|
== Changelog ==
|
||||||
|
|
||||||
|
= 1.5.0 =
|
||||||
|
*2014-05-30*
|
||||||
|
|
||||||
|
What's new:
|
||||||
|
|
||||||
|
* APCu backend added ( APCu is a stripped version of APC with only user object cache functionality what can be used with PHP 5.4 & 5.5 besides [Opcache](http://php.net/manual/en/book.opcache.php "PHP Opcache") )
|
||||||
|
|
||||||
= 1.4.0 =
|
= 1.4.0 =
|
||||||
*2014-05-12*
|
*2014-05-12*
|
||||||
|
|
||||||
What's changed:
|
What's new:
|
||||||
|
|
||||||
|
* Xcache backend added ( theoretical, partially tested, volunteer testers required )
|
||||||
|
|
||||||
|
What's fixed:
|
||||||
|
|
||||||
* Xcache backend added ( alpha version, still under heavy testing )
|
|
||||||
* invalidation for comment actions added
|
* invalidation for comment actions added
|
||||||
|
|
||||||
= 1.3.3 =
|
= 1.3.3 =
|
||||||
|
|
|
@ -166,7 +166,7 @@ if (!class_exists('WP_FFPC_Backend')) {
|
||||||
$this->log ( sprintf( __translate__( 'set %s expiration time: %s', $this->plugin_constant ), $key, $this->options['expire'] ) );
|
$this->log ( sprintf( __translate__( 'set %s expiration time: %s', $this->plugin_constant ), $key, $this->options['expire'] ) );
|
||||||
|
|
||||||
/* proxy to internal function */
|
/* proxy to internal function */
|
||||||
$internal = $this->options['cache_type'] . '_set';
|
$internal = $this->proxy( 'set' );
|
||||||
$result = $this->$internal( $key, $data );
|
$result = $this->$internal( $key, $data );
|
||||||
|
|
||||||
/* check result validity */
|
/* check result validity */
|
||||||
|
@ -448,13 +448,13 @@ if (!class_exists('WP_FFPC_Backend')) {
|
||||||
*/
|
*/
|
||||||
private function apc_init () {
|
private function apc_init () {
|
||||||
/* verify apc functions exist, apc extension is loaded */
|
/* verify apc functions exist, apc extension is loaded */
|
||||||
if ( ! function_exists( 'apc_sma_info' ) ) {
|
if ( ! function_exists( 'apc_cache_info' ) ) {
|
||||||
$this->log ( __translate__('APC extension missing', $this->plugin_constant ) );
|
$this->log ( __translate__('APC extension missing', $this->plugin_constant ) );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* verify apc is working */
|
/* verify apc is working */
|
||||||
if ( apc_sma_info() ) {
|
if ( apc_cache_info("user",true) ) {
|
||||||
$this->log ( __translate__('backend OK', $this->plugin_constant ) );
|
$this->log ( __translate__('backend OK', $this->plugin_constant ) );
|
||||||
$this->alive = true;
|
$this->alive = true;
|
||||||
}
|
}
|
||||||
|
@ -527,6 +527,92 @@ if (!class_exists('WP_FFPC_Backend')) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*********************** END APC FUNCTIONS ***********************/
|
||||||
|
/*********************** APCu FUNCTIONS ***********************/
|
||||||
|
/**
|
||||||
|
* init apcu backend: test APCu availability and set alive status
|
||||||
|
*/
|
||||||
|
private function apcu_init () {
|
||||||
|
/* verify apcu functions exist, apcu extension is loaded */
|
||||||
|
if ( ! function_exists( 'apcu_cache_info' ) ) {
|
||||||
|
$this->log ( __translate__('APCu extension missing', $this->plugin_constant ) );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* verify apcu is working */
|
||||||
|
if ( apcu_cache_info("user",true) ) {
|
||||||
|
$this->log ( __translate__('backend OK', $this->plugin_constant ) );
|
||||||
|
$this->alive = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* health checker for APC
|
||||||
|
*
|
||||||
|
* @return boolean Aliveness status
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function apcu_status () {
|
||||||
|
$this->status = true;
|
||||||
|
return $this->alive;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get function for APC backend
|
||||||
|
*
|
||||||
|
* @param string $key Key to get values for
|
||||||
|
*
|
||||||
|
* @return mixed Fetched data based on key
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function apcu_get ( &$key ) {
|
||||||
|
return apcu_fetch( $key );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set function for APC backend
|
||||||
|
*
|
||||||
|
* @param string $key Key to set with
|
||||||
|
* @param mixed $data Data to set
|
||||||
|
*
|
||||||
|
* @return boolean APC store outcome
|
||||||
|
*/
|
||||||
|
private function apcu_set ( &$key, &$data ) {
|
||||||
|
return apcu_store( $key , $data , $this->options['expire'] );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Flushes APC user entry storage
|
||||||
|
*
|
||||||
|
* @return boolean APC flush outcome status
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
private function apcu_flush ( ) {
|
||||||
|
return apcu_clear_cache();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes entry from APC or flushes APC user entry storage
|
||||||
|
*
|
||||||
|
* @param mixed $keys Keys to clear, string or array
|
||||||
|
*/
|
||||||
|
private function apcu_clear ( &$keys ) {
|
||||||
|
/* make an array if only one string is present, easier processing */
|
||||||
|
if ( !is_array ( $keys ) )
|
||||||
|
$keys = array ( $keys => true );
|
||||||
|
|
||||||
|
foreach ( $keys as $key => $dummy ) {
|
||||||
|
if ( ! apcu_delete ( $key ) ) {
|
||||||
|
$this->log ( sprintf( __translate__( 'Failed to delete APC entry: %s', $this->plugin_constant ), $key ), LOG_ERR );
|
||||||
|
//throw new Exception ( __translate__('Deleting APC entry failed with key ', $this->plugin_constant ) . $key );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->log ( sprintf( __translate__( 'APC entry delete: %s', $this->plugin_constant ), $key ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*********************** END APC FUNCTIONS ***********************/
|
/*********************** END APC FUNCTIONS ***********************/
|
||||||
|
|
||||||
/*********************** XCACHE FUNCTIONS ***********************/
|
/*********************** XCACHE FUNCTIONS ***********************/
|
||||||
|
|
|
@ -115,13 +115,15 @@ if ( ! class_exists( 'WP_FFPC' ) ) {
|
||||||
/* cache type possible values array */
|
/* cache type possible values array */
|
||||||
$this->select_cache_type = array (
|
$this->select_cache_type = array (
|
||||||
'apc' => __( 'APC' , $this->plugin_constant ),
|
'apc' => __( 'APC' , $this->plugin_constant ),
|
||||||
|
'apcu' => __( 'APCu' , $this->plugin_constant ),
|
||||||
'xcache' => __( 'XCache' , $this->plugin_constant ),
|
'xcache' => __( 'XCache' , $this->plugin_constant ),
|
||||||
'memcache' => __( 'PHP Memcache' , $this->plugin_constant ),
|
'memcache' => __( 'PHP Memcache' , $this->plugin_constant ),
|
||||||
'memcached' => __( 'PHP Memcached' , $this->plugin_constant ),
|
'memcached' => __( 'PHP Memcached' , $this->plugin_constant ),
|
||||||
);
|
);
|
||||||
/* check for required functions / classes for the cache types */
|
/* check for required functions / classes for the cache types */
|
||||||
$this->valid_cache_type = array (
|
$this->valid_cache_type = array (
|
||||||
'apc' => function_exists( 'apc_sma_info' ) ? true : false,
|
'apc' => function_exists( 'apc_cache_info' ) ? true : false,
|
||||||
|
'apcu' => function_exists( 'apcu_cache_info' ) ? true : false,
|
||||||
'xcache' => function_exists( 'xcache_info' ) ? true : false,
|
'xcache' => function_exists( 'xcache_info' ) ? true : false,
|
||||||
'memcache' => class_exists ( 'Memcache') ? true : false,
|
'memcache' => class_exists ( 'Memcache') ? true : false,
|
||||||
'memcached' => class_exists ( 'Memcached') ? true : false,
|
'memcached' => class_exists ( 'Memcached') ? true : false,
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
Plugin Name: WP-FFPC
|
Plugin Name: WP-FFPC
|
||||||
Plugin URI: http://petermolnar.eu/wordpress/wp-ffpc
|
Plugin URI: http://petermolnar.eu/wordpress/wp-ffpc
|
||||||
Description: WordPress cache plugin for memcached & nginx - unbeatable speed
|
Description: WordPress cache plugin for memcached & nginx - unbeatable speed
|
||||||
Version: 1.4.0
|
Version: 1.5.0
|
||||||
Author: Peter Molnar <hello@petermolnar.eu>
|
Author: Peter Molnar <hello@petermolnar.eu>
|
||||||
Author URI: http://petermolnar.eu/
|
Author URI: http://petermolnar.eu/
|
||||||
License: GPLv3
|
License: GPLv3
|
||||||
|
|
Loading…
Reference in a new issue