= 1.3.3 = *2014-04-29* What's changed: * removed broadcast message * better logs ( additional logs and adding translation compatibility )
@@ -4,18 +4,24 @@ 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 Requires at least: 3.0 Tested up to: 3.9 -Stable tag: 1.3.2 +Stable tag: 1.3.3 License: GPLv3 License URI: http://www.gnu.org/licenses/gpl-3.0.html -Fastest way of cache for WordPress: memcached + nginx! +The fastest way to cache: full page in memory cache for WordPress! == 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, however, can be connected with [NGiNX](http://NGiNX.org "NGiNX") through memcached for unbeatable speed. -Supports PHP Memcached, PHP Memcache and APC as storage engines, subdomain and domain based WordPress Networks. +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. +It can be configured to join forces with [NGiNX](http://NGiNX.org "NGiNX")'s built-in [memcached plugin](http://nginx.org/en/docs/http/ngx_http_memcached_module.html "memcached plugin") for unbeatable speed. = Features: = -* Wordpress Network support ( for subdomain layout ) +* Wordpress Network support + * fully supported domain/subdomain Networks + * will work in Network Enabled mode only for subdirectory based Multisites ( no per site setting possibility ) +* supports variable backends + * memcached with PHP Memcached + * memcached with PHP Memcache + * APC * cache exclude possibilities ( home, feeds, archieves, pages, singles ) * (optional) cache for logged-in users * 404 caching@@ -26,7 +32,6 @@ * pingback HTTP header preservation
* talkative log for [WP_DEBUG](http://codex.wordpress.org/WP_DEBUG "WP_DEBUG") * multiple memcached upstream support * precache ( manually or by timed by wp-cron ) -* [NGiNX](http://NGiNX.org "NGiNX") compatibility Many thanks for contributors, supporters, testers & bug reporters:@@ -88,6 +93,14 @@ 4. memcached servers settings
5. NGiNX example == Changelog == + += 1.3.3 = +*2014-04-29* + +What's changed: + +* removed broadcast message +* better logs ( additional logs and adding translation compatibility ) = 1.3.2 = *2014-04-09*
@@ -116,9 +116,8 @@ */
public function key ( &$prefix ) { /* data is string only with content, meta is not used in nginx */ $key = $prefix . str_replace ( array_keys( $this->urimap ), $this->urimap, $this->options['key'] ); - $this->log ( __translate__('original key configuration: ', $this->plugin_constant ) . $this->options['key'] ); - $this->log ( __translate__('setting key to: ', $this->plugin_constant ) . $key ); - + $this->log ( sprintf( __translate__( 'original key configuration: %s', $this->plugin_constant ), $this->options['key'] ) ); + $this->log ( sprintf( __translate__( 'setting key to: %s', $this->plugin_constant ), $key ) ); return $key; }@@ -137,14 +136,14 @@ if ( ! $this->is_alive() )
return false; /* log the current action */ - $this->log ( __translate__('get ', $this->plugin_constant ). $key ); + $this->log ( sprintf( __translate__( 'get %s', $this->plugin_constant ), $key ) ); /* proxy to internal function */ $internal = $this->proxy( 'get' ); $result = $this->$internal( $key ); if ( $result === false ) - $this->log ( __translate__( "failed to get entry: ", $this->plugin_constant ) . $key ); + $this->log ( sprintf( __translate__( 'failed to get entry: %s', $this->plugin_constant ), $key ) ); return $result; }@@ -164,7 +163,7 @@ if ( ! $this->is_alive() )
return false; /* log the current action */ - $this->log( __translate__('set ', $this->plugin_constant ) . $key . __translate__(' expiration time: ', $this->plugin_constant ) . $this->options['expire']); + $this->log ( sprintf( __translate__( 'set %s expiration time: %s', $this->plugin_constant ), $key, $this->options['expire'] ) ); /* proxy to internal function */ $internal = $this->options['cache_type'] . '_set';@@ -172,7 +171,7 @@ $result = $this->$internal( $key, $data );
/* check result validity */ if ( $result === false ) - $this->log ( __translate__('failed to set entry: ', $this->plugin_constant ) . $key, LOG_WARNING ); + $this->log ( sprintf( __translate__( 'failed to set entry: %s', $this->plugin_constant ), $key ), LOG_WARNING ); return $result; }@@ -232,7 +231,7 @@ $path = substr ( get_permalink( $post_id ) , 7 );
/* no path, don't do anything */ if ( empty( $path ) ) { - $this->log ( __translate__('unable to determine path from Post Permalink, post ID: ', $this->plugin_constant ) . $post_id , LOG_WARNING ); + $this->log ( sprintf( __translate__( 'unable to determine path from Post Permalink, post ID: %s', $this->plugin_constant ), $post_id ), LOG_WARNING ); return false; }@@ -499,11 +498,11 @@ $keys = array ( $keys => true );
foreach ( $keys as $key => $dummy ) { if ( ! apc_delete ( $key ) ) { - $this->log ( __translate__('Failed to delete APC entry: ', $this->plugin_constant ) . $key, LOG_ERR ); + $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 ( __translate__( 'APC entry delete: ', $this->plugin_constant ) . $key ); + $this->log ( sprintf( __translate__( 'APC entry delete: %s', $this->plugin_constant ), $key ) ); } } }@@ -567,7 +566,7 @@
/* only add servers that does not exists already in connection pool */ if ( !@array_key_exists($server_id , $servers_alive ) ) { $this->connection->addServer( $server['host'], $server['port'] ); - $this->log ( $server_id . __translate__(" added, persistent mode: ", $this->plugin_constant ) . $this->options['persistent'] ); + $this->log ( sprintf( __translate__( '%s added, persistent mode: %s', $this->plugin_constant ), $server_id, $this->options['persistent'] ) ); } }@@ -591,7 +590,7 @@ /* reset server status to offline */
$this->status[$server_id] = 0; /* if server uptime is not empty, it's most probably up & running */ if ( !empty($details['uptime']) ) { - $this->log ( $server_id . __translate__(" server is up & running", $this->plugin_constant )); + $this->log ( sprintf( __translate__( '%s server is up & running', $this->plugin_constant ), $server_id ) ); $this->status[$server_id] = 1; } }@@ -621,7 +620,8 @@
/* if storing failed, log the error code */ if ( $result === false ) { $code = $this->connection->getResultCode(); - $this->log ( __translate__('unable to set entry ', $this->plugin_constant ) . $key . __translate__( ', Memcached error code: ', $this->plugin_constant ) . $code ); + $this->log ( sprintf( __translate__( 'unable to set entry: %s', $this->plugin_constant ), $key ) ); + $this->log ( sprintf( __translate__( 'Memcached error code: %s', $this->plugin_constant ), $code ) ); //throw new Exception ( __translate__('Unable to store Memcached entry ', $this->plugin_constant ) . $key . __translate__( ', error code: ', $this->plugin_constant ) . $code ); }@@ -653,10 +653,11 @@ $kresult = $this->connection->delete( $key );
if ( $kresult === false ) { $code = $this->connection->getResultCode(); - $this->log ( __translate__('unable to delete entry ', $this->plugin_constant ) . $key . __translate__( ', Memcached error code: ', $this->plugin_constant ) . $code ); + $this->log ( sprintf( __translate__( 'unable to delete entry: %s', $this->plugin_constant ), $key ) ); + $this->log ( sprintf( __translate__( 'Memcached error code: %s', $this->plugin_constant ), $code ) ); } else { - $this->log ( __translate__( 'entry deleted: ', $this->plugin_constant ) . $key ); + $this->log ( sprintf( __translate__( 'entry deleted: %s', $this->plugin_constant ), $key ) ); } } }@@ -702,7 +703,7 @@ $this->status[$server_id] = $this->connection->$conn ( 'unix:/' . $server['host'] );
else $this->status[$server_id] = $this->connection->$conn ( $server['host'] , $server['port'] ); - $this->log ( $server_id . __translate__(" added, persistent mode: ", $this->plugin_constant ) . $this->options['persistent'] ); + $this->log ( sprintf( __translate__( '%s added, persistent mode: %s', $this->plugin_constant ), $server_id, $this->options['persistent'] ) ); } /* backend is now alive */@@ -721,9 +722,9 @@ /* get servers statistic from connection */
foreach ( $this->options['servers'] as $server_id => $server ) { $this->status[$server_id] = $this->connection->getServerStatus( $server['host'], $server['port'] ); if ( $this->status[$server_id] == 0 ) - $this->log ( $server_id . __translate__(" server is down", $this->plugin_constant )); + $this->log ( sprintf( __translate__( '%s server is down', $this->plugin_constant ), $server_id ) ); else - $this->log ( $server_id . __translate__(" server is up & running", $this->plugin_constant )); + $this->log ( sprintf( __translate__( '%s server is up & running', $this->plugin_constant ), $server_id ) ); } }@@ -772,10 +773,10 @@ foreach ( $keys as $key => $dummy ) {
$kresult = $this->connection->delete( $key ); if ( $kresult === false ) { - $this->log ( __translate__('unable to delete entry ', $this->plugin_constant ) . $key ); + $this->log ( sprintf( __translate__( 'unable to delete entry: %s', $this->plugin_constant ), $key ) ); } else { - $this->log ( __translate__( 'entry deleted: ', $this->plugin_constant ) . $key ); + $this->log ( sprintf( __translate__( 'entry deleted: %s', $this->plugin_constant ), $key ) ); } } }
@@ -30,7 +30,7 @@ * @var string $precache_phpfile Precache PHP worker location
* @var array $shell_possibilities List of possible precache worker callers [TODO] finish list of vars */ - class WP_FFPC extends WP_Plugins_Abstract_v2 { + class WP_FFPC extends WP_Plugins_Abstract_v3 { const host_separator = ','; const port_separator = ':'; const donation_id_key = 'hosted_button_id=';@@ -188,8 +188,7 @@ add_filter('redirect_canonical', 'wp_ffpc_redirect_callback', 10, 2);
/* clean up schedule if needed */ if ( !isset( $this->options['precache_schedule'] ) || $this->options['precache_schedule'] == 'null' ) { - $this->log ( 'CRON clearing event' ); - wp_clear_scheduled_hook ( self::precache_id ); + $this->log ( sprintf ( __( 'clearing scheduled hook %s', $this->plugin_constant ), self::precache_id ) ); } /* add precache coldrun action */@@ -744,7 +743,7 @@ $this->log ( __( 'Scheduling WP-CRON event', $this->plugin_constant ) );
$this->scheduled = wp_schedule_event( time(), $this->options['precache_schedule'] , self::precache_id ); } elseif ( ( !isset($this->options['precache_schedule']) || $this->options['precache_schedule'] == 'null' ) && !empty( $schedule ) ) { - $this->log ( __('Clearing WP-CRON clearing event ' , $this->plugin_constant ) ); + $this->log ( __('Clearing WP-CRON scheduled hook ' , $this->plugin_constant ) ); wp_clear_scheduled_hook ( self::precache_id ); }
@@ -50,6 +50,6 @@ 'precache_schedule' => 'null',
'key' => '$scheme://$host$request_uri', ); -$wp_ffpc = new WP_FFPC ( 'wp-ffpc', '1.2', 'WP-FFPC', $wp_ffpc_defaults, 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=XU3DG7LLA76WC' ); +$wp_ffpc = new WP_FFPC ( 'wp-ffpc', '1.3.3', 'WP-FFPC', $wp_ffpc_defaults, 'https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=XU3DG7LLA76WC' ); ?>