Compare commits

...

35 commits

Author SHA1 Message Date
Peter Molnar
b894610cb1 typos 2017-02-11 00:11:35 +00:00
Peter Molnar
eac45ed95e Merge branch 'master' of github:/petermolnar/wp-ffpc
Conflicts:
	wp-ffpc-class.php
2017-02-10 21:34:54 +00:00
Peter Molnar
705afd1535 cleanup for development hibernation 2017-02-10 21:32:34 +00:00
Peter Molnar
b19e446e0f Merge pull request #50 from gablau/master
Some fix
2016-09-27 09:10:06 +01:00
Gabriele Lauricella
24430be27a some fix
* woocommerce api endpoint
* small fix
2016-04-22 17:27:57 +02:00
Gabriele Lauricella
4b5bce6cc4 Merge pull request #1 from petermolnar/master
sync
2016-04-22 17:20:23 +02:00
Peter Molnar
87b2f986a1 adding supporters, fixing missing version update in options; ensuring unix line ending in every file 2016-04-22 10:16:28 +00:00
Peter Molnar
dade9fe586 Merge pull request #49 from gablau/master
Exclude WooCommerce + Translation
2016-04-22 08:23:16 +01:00
Gabriele Lauricella
03f393950f POT + Preliminary Italian Translation 2016-04-21 17:35:07 +02:00
Gabriele Lauricella
c48d971ddf Create wp-ffpc.pot 2016-04-21 17:34:14 +02:00
Gabriele Lauricella
ee76a2a9d8 = 1.11.1 =
* exclude cache for WooCommerce
* fix load textdomain
* add Italian (it_IT) translation
2016-04-21 17:32:26 +02:00
Peter Molnar
d09fa5828b 1.11.0 - see changelog 2016-01-15 21:02:47 +00:00
Peter Molnar
8ab0a0d99a merge conflict fixed 2016-01-15 20:20:58 +00:00
Peter Molnar
32bd2f7b0e debug logging restructure 2016-01-15 20:18:18 +00:00
Peter Molnar
9de0ad8f30 Merge pull request #46 from vdwijngaert/patch-1
Implements #45.
2016-01-15 10:33:04 +00:00
Koen Van den Wijngaert
18ad72f799 Implements #45. 2016-01-15 11:19:37 +01:00
Peter Molnar
62f3d0ab00 = 1.10.1 =
*2015-10-30*

* fixed nginx configuration sample snippets
* nginx configuration moved from Settings tab to Help tab, so if you're looking for the "nginx" tab, you need to look under "Help" on the WP-FFPC Settings page.
2015-10-30 15:41:37 +00:00
Peter Molnar
06bee4b178 Merge pull request #44 from szepeviktor/patch-1
Proper sub-list in readme
2015-10-30 09:43:19 +00:00
Viktor Szépe
c09ebac154 Proper sub-list in readme 2015-10-30 10:31:42 +01:00
Peter Molnar
9f029e2414 1.10.0
proper browser cache support:
* new options to set real browser cache expiry for singles, taxonomy and home
* added Etag support based on browser cache expiry
* added proper Expires header according to cache entry generation time + browser cache expiry
* added support for Last Modified header for home & taxonomy ( singles already had it) based on the last post modified date within the taxonomy
2015-10-23 12:40:09 +01:00
Peter Molnar
c84498d069 1.9.1, see changelog 2015-10-18 18:32:10 +01:00
Peter Molnar
fedcdfc278 1.9.0
* adding exclude option based on text entry matching ( regex )
* replacing variable in __ and _e functions to constant
2015-10-14 20:14:09 +01:00
Peter Molnar
457ad184c4 = 1.8.4 =
*2015-10-13*

* changes in HTML debug comment: instead of the former, single comment, now 2 comments are added. The first is added when the cache entry is generated; the second only appears if the page was served from the cached entry. Please note that this last bit will - should - change with every single refresh.
* backend code is now split into separate files
* more debug code
2015-10-13 11:13:13 +01:00
Peter Molnar
7b16741af8 later 2015-07-02 11:17:50 +01:00
Peter Molnar
f0c71ec396 Merge branch 'master' of github:/petermolnar/wp-ffpc 2015-06-05 09:51:24 +01:00
Peter Molnar
d715c6fbaf fixes + hand-merge of https://github.com/petermolnar/wp-ffpc/pull/38/files 2015-06-05 09:50:42 +01:00
Peter Molnar
f64c17a8f9 Merge pull request #36 from b3it/heroku
Add composer.json
2015-06-05 09:47:02 +01:00
Peter Molnar
0da7a83f0e new contributor 2015-05-23 12:03:13 +01:00
Peter Molnar
2df573d955 new donation 2015-05-22 20:12:26 +01:00
Peter Molnar
098f05985c adding new type of HTML debug comment 2015-05-07 14:22:33 +01:00
Peter Molnar
65325033fa 1.8.3 2015-05-07 13:33:32 +01:00
Peter Molnar
42bc1771fa 1.8.2 2015-04-29 23:07:40 +01:00
Peter Molnar
6f19008509 1.8.1 2015-04-29 09:57:40 +01:00
Peter Molnar
525fc33839 1.8.0 2015-04-29 09:40:12 +01:00
Tom Castleman
a4c870cc0c Add composer.json 2015-02-19 13:05:33 +00:00
20 changed files with 4098 additions and 1528 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
vendor
composer.lock

3
.gitmodules vendored
View file

@ -1,3 +0,0 @@
[submodule "wp-common"]
path = wp-common
url = https://github.com/petermolnar/wp-common.git

92
backends/apc.php Normal file
View file

@ -0,0 +1,92 @@
<?php
if (!class_exists('WP_FFPC_Backend_apc')):
class WP_FFPC_Backend_apc extends WP_FFPC_Backend {
/**
* init apc backend: test APC availability and set alive status
*/
protected function _init () {
/* verify apc functions exist, apc extension is loaded */
if ( ! function_exists( 'apc_cache_info' ) ) {
$this->log ( 'APC extension missing' );
return false;
}
/* verify apc is working */
if ( apc_cache_info("user",true) ) {
$this->log ( 'backend OK' );
$this->alive = true;
}
}
/**
* health checker for APC
*
* @return boolean Aliveness status
*
*/
protected function _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
*
*/
protected function _get ( &$key ) {
return apc_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
*/
protected function _set ( &$key, &$data, &$expire ) {
return apc_store( $key , $data , $expire );
}
/**
* Flushes APC user entry storage
*
* @return boolean APC flush outcome status
*
*/
protected function _flush ( ) {
return apc_clear_cache('user');
}
/**
* Removes entry from APC or flushes APC user entry storage
*
* @param mixed $keys Keys to clear, string or array
*/
protected function _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 ( ! apc_delete ( $key ) ) {
$this->log ( sprintf( 'Failed to delete APC entry: %s', $key ), LOG_WARNING );
//throw new Exception ( __translate__('Deleting APC entry failed with key ', $this->plugin_constant ) . $key );
}
else {
$this->log ( sprintf( 'APC entry delete: %s', $key ) );
}
}
}
}
endif;

92
backends/apcu.php Normal file
View file

@ -0,0 +1,92 @@
<?php
if (!class_exists('WP_FFPC_Backend_apcu')):
class WP_FFPC_Backend_apcu extends WP_FFPC_Backend {
/**
* init apcu backend: test APCu availability and set alive status
*/
protected function _init () {
/* verify apcu functions exist, apcu extension is loaded */
if ( ! function_exists( 'apcu_cache_info' ) ) {
$this->log ( 'APCu extension missing' );
return false;
}
/* verify apcu is working */
if ( @apcu_cache_info("user") != false ) {
$this->log ( 'backend OK' );
$this->alive = true;
}
}
/**
* health checker for APC
*
* @return boolean Aliveness status
*
*/
protected function _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
*
*/
protected function _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
*/
protected function _set ( &$key, &$data, &$expire ) {
return apcu_store( $key , $data , $expire );
}
/**
* Flushes APC user entry storage
*
* @return boolean APC flush outcome status
*
*/
protected function _flush ( ) {
return apcu_clear_cache();
}
/**
* Removes entry from APC or flushes APC user entry storage
*
* @param mixed $keys Keys to clear, string or array
*/
protected function _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( 'Failed to delete APC entry: %s', $key ), LOG_WARNING );
//throw new Exception ( __translate__('Deleting APC entry failed with key ', 'wp-ffpc' ) . $key );
}
else {
$this->log ( sprintf( 'APC entry delete: %s', $key ) );
}
}
}
}
endif;

122
backends/memcache.php Normal file
View file

@ -0,0 +1,122 @@
<?php
if (!class_exists('WP_FFPC_Backend_memcache')):
class WP_FFPC_Backend_memcache extends WP_FFPC_Backend {
/**
* init memcache backend
*/
protected function _init () {
/* Memcached class does not exist, Memcache extension is not available */
if (!class_exists('Memcache')) {
$this->log ( 'PHP Memcache extension missing', LOG_WARNING );
return false;
}
/* check for existing server list, otherwise we cannot add backends */
if ( empty ( $this->options['servers'] ) && ! $this->alive ) {
$this->log ( "servers list is empty, init failed", LOG_WARNING );
return false;
}
/* check is there's no backend connection yet */
if ( $this->connection === NULL )
$this->connection = new Memcache();
/* check if initialization was success or not */
if ( $this->connection === NULL ) {
$this->log ( 'error initializing Memcache PHP extension, exiting' );
return false;
}
/* adding servers */
foreach ( $this->options['servers'] as $server_id => $server ) {
/* in case of unix socket */
if ( $server['port'] === 0 )
$this->status[$server_id] = $this->connection->connect ( 'unix:/' . $server['host'] );
else
$this->status[$server_id] = $this->connection->connect ( $server['host'] , $server['port'] );
$this->log ( sprintf( '%s added', $server_id ) );
}
/* backend is now alive */
$this->alive = true;
$this->_status();
}
/**
* check current backend alive status for Memcached
*
*/
protected function _status () {
/* server status will be calculated by getting server stats */
$this->log ( "checking server statuses" );
/* get servers statistic from connection */
foreach ( $this->options['servers'] as $server_id => $server ) {
if ( $server['port'] === 0 )
$this->status[$server_id] = $this->connection->getServerStatus( $server['host'], 11211 );
else
$this->status[$server_id] = $this->connection->getServerStatus( $server['host'], $server['port'] );
if ( $this->status[$server_id] == 0 )
$this->log ( sprintf( '%s server is down', $server_id ) );
else
$this->log ( sprintf( '%s server is up & running', $server_id ) );
}
}
/**
* get function for Memcached backend
*
* @param string $key Key to get values for
*
*/
protected function _get ( &$key ) {
return $this->connection->get($key);
}
/**
* Set function for Memcached backend
*
* @param string $key Key to set with
* @param mixed $data Data to set
*
*/
protected function _set ( &$key, &$data, &$expire ) {
$result = $this->connection->set ( $key, $data , 0 , $expire );
return $result;
}
/**
*
* Flush memcached entries
*/
protected function _flush ( ) {
return $this->connection->flush();
}
/**
* Removes entry from Memcached or flushes Memcached storage
*
* @param mixed $keys String / array of string of keys to delete entries with
*/
protected function _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 ) {
$kresult = $this->connection->delete( $key );
if ( $kresult === false ) {
$this->log ( sprintf( 'unable to delete entry: %s', $key ) );
}
else {
$this->log ( sprintf( 'entry deleted: %s', $key ) );
}
}
}
}
endif;

159
backends/memcached.php Normal file
View file

@ -0,0 +1,159 @@
<?php
if (!class_exists('WP_FFPC_Backend_memcached')):
class WP_FFPC_Backend_memcached extends WP_FFPC_Backend {
protected function _init () {
/* Memcached class does not exist, Memcached extension is not available */
if (!class_exists('Memcached')) {
$this->log ( ' Memcached extension missing, wp-ffpc will not be able to function correctly!', LOG_WARNING );
return false;
}
/* check for existing server list, otherwise we cannot add backends */
if ( empty ( $this->options['servers'] ) && ! $this->alive ) {
$this->log ( "Memcached servers list is empty, init failed", LOG_WARNING );
return false;
}
/* check is there's no backend connection yet */
if ( $this->connection === NULL ) {
$this->connection = new Memcached();
/* use binary and not compressed format, good for nginx and still fast */
$this->connection->setOption( Memcached::OPT_COMPRESSION , false );
if ($this->options['memcached_binary']){
$this->connection->setOption( Memcached::OPT_BINARY_PROTOCOL , true );
}
if ( version_compare( phpversion( 'memcached' ) , '2.0.0', '>=' ) && ini_get( 'memcached.use_sasl' ) == 1 && isset($this->options['authpass']) && !empty($this->options['authpass']) && isset($this->options['authuser']) && !empty($this->options['authuser']) ) {
$this->connection->setSaslAuthData ( $this->options['authuser'], $this->options['authpass']);
}
}
/* check if initialization was success or not */
if ( $this->connection === NULL ) {
$this->log ( 'error initializing Memcached PHP extension, exiting' );
return false;
}
/* check if we already have list of servers, only add server(s) if it's not already connected */
$servers_alive = array();
if ( !empty ( $this->status ) ) {
$servers_alive = $this->connection->getServerList();
/* create check array if backend servers are already connected */
if ( !empty ( $servers ) ) {
foreach ( $servers_alive as $skey => $server ) {
$skey = $server['host'] . ":" . $server['port'];
$servers_alive[ $skey ] = true;
}
}
}
/* adding servers */
foreach ( $this->options['servers'] as $server_id => $server ) {
/* reset server status to unknown */
//$this->status[$server_id] = -1;
/* 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 ( sprintf( '%s added', $server_id ) );
}
}
/* backend is now alive */
$this->alive = true;
$this->_status();
}
/**
* sets current backend alive status for Memcached servers
*
*/
protected function _status () {
/* server status will be calculated by getting server stats */
$this->log ( "checking server statuses");
/* get server list from connection */
$servers = $this->connection->getServerList();
foreach ( $servers as $server ) {
$server_id = $server['host'] . self::port_separator . $server['port'];
/* reset server status to offline */
$this->status[$server_id] = 0;
if ($this->connection->set('wp-ffpc', time())) {
$this->log ( sprintf( '%s server is up & running', $server_id ) );
$this->status[$server_id] = 1;
}
}
}
/**
* get function for Memcached backend
*
* @param string $key Key to get values for
*
*/
protected function _get ( &$key ) {
return $this->connection->get($key);
}
/**
* Set function for Memcached backend
*
* @param string $key Key to set with
* @param mixed $data Data to set
*
*/
protected function _set ( &$key, &$data, &$expire ) {
$result = $this->connection->set ( $key, $data , $expire );
/* if storing failed, log the error code */
if ( $result === false ) {
$code = $this->connection->getResultCode();
$this->log ( sprintf( 'unable to set entry: %s', $key ) );
$this->log ( sprintf( 'Memcached error code: %s', $code ) );
//throw new Exception ( 'Unable to store Memcached entry ' . $key . ', error code: ' . $code );
}
return $result;
}
/**
*
* Flush memcached entries
*/
protected function _flush ( ) {
return $this->connection->flush();
}
/**
* Removes entry from Memcached or flushes Memcached storage
*
* @param mixed $keys String / array of string of keys to delete entries with
*/
protected function _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 ) {
$kresult = $this->connection->delete( $key );
if ( $kresult === false ) {
$code = $this->connection->getResultCode();
$this->log ( sprintf( 'unable to delete entry: %s', $key ) );
$this->log ( sprintf( 'Memcached error code: %s', $code ) );
}
else {
$this->log ( sprintf( 'entry deleted: %s', $key ) );
}
}
}
}
endif;

11
composer.json Normal file
View file

@ -0,0 +1,11 @@
{
"name": "petermolnar/wp-ffpc",
"type": "wordpress-plugin",
"homepage": "https://github.com/petermolnar/wp-ffpc",
"license": "GPLv3",
"description": "WordPress Plugin WP-FFPC",
"keywords": ["plugin", "cache", "page cache", "full page cache", "nginx", "memcached", "apc", "speed"],
"require": {
"composer/installers": "~1.0.0"
}
}

BIN
languages/wp-ffpc-it_IT.mo Normal file

Binary file not shown.

759
languages/wp-ffpc-it_IT.po Normal file
View file

@ -0,0 +1,759 @@
msgid ""
msgstr ""
"Project-Id-Version: WP-FFPC\n"
"POT-Creation-Date: 2016-04-21 17:14+0200\n"
"PO-Revision-Date: 2016-04-21 17:14+0200\n"
"Last-Translator: Gabriele Lauricella <gab.lau@gmail.com>\n"
"Language-Team: Gabriele Lauricella <gab.lau@gmail.com>\n"
"Language: it_IT\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Poedit 1.8.4\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-WPHeader: wp-ffpc.php\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SearchPathExcluded-0: *.js\n"
#: wp-ffpc-abstract.php:381
msgid "Default : "
msgstr "Predefinito :"
#: wp-ffpc-abstract.php:464
msgid ""
"This plugin helped your business? I'd appreciate a coffee in return :) "
"Please!"
msgstr ""
#: wp-ffpc-abstract.php:479
msgid "Donation for "
msgstr "Donazione per"
#: wp-ffpc-abstract.php:481
msgid "Donate via PayPal"
msgstr "Dona con PayPal"
#: wp-ffpc-abstract.php:501
#, fuzzy, php-format
msgid " updating network option %s"
msgstr "Aggiornamento tema: %s"
#: wp-ffpc-abstract.php:505
#, fuzzy, php-format
msgid "- updating option %s"
msgstr "Aggiornamento in corso"
#: wp-ffpc-abstract.php:516
#, fuzzy, php-format
msgid "- getting network option %s"
msgstr "Errore nell'ottenere la struttura della tabella %s"
#: wp-ffpc-abstract.php:520
#, fuzzy, php-format
msgid " getting option %s"
msgstr "Errore nell'ottenere la struttura della tabella %s"
#: wp-ffpc-abstract.php:533
#, fuzzy, php-format
msgid " deleting network option %s"
msgstr "Amministratore del network: %s"
#: wp-ffpc-abstract.php:537
#, fuzzy, php-format
msgid " deleting option %s"
msgstr "eliminazione del file allegato..."
#: wp-ffpc-abstract.php:614
#, php-format
msgid "%s"
msgstr "%s"
#: wp-ffpc-class.php:126
#, php-format
msgid ""
"Domain mismatch: the site domain configuration (%s) does not match the "
"HTTP_HOST (%s) variable in PHP. Please fix the incorrect one, otherwise the "
"plugin may not work as expected."
msgstr ""
#: wp-ffpc-class.php:134
msgid "APC"
msgstr "APC"
#: wp-ffpc-class.php:135
msgid "APCu"
msgstr "APCu"
#: wp-ffpc-class.php:136
msgid "PHP Memcache"
msgstr "PHP Memcache"
#: wp-ffpc-class.php:137
msgid "PHP Memcached"
msgstr "PHP Memcached"
#: wp-ffpc-class.php:138
msgid "Redis (experimental, it will break!)"
msgstr ""
#: wp-ffpc-class.php:152
#, fuzzy
msgid "flush cache"
msgstr ""
"Importante: Non dimenticare di svuotare la cache usando WP Super Cache "
"quando attivi o disattivi la modalità di manutenzione."
#: wp-ffpc-class.php:153
#, fuzzy
msgid "only modified post"
msgstr "Può essere modificato solo dall'admin o se vuoto"
#: wp-ffpc-class.php:154
msgid "modified post and all related taxonomies"
msgstr ""
#: wp-ffpc-class.php:159
msgid "The HTTP scheme (i.e. http, https)."
msgstr ""
#: wp-ffpc-class.php:160
msgid ""
"Host in the header of request or name of the server processing the request "
"if the Host header is not available."
msgstr ""
#: wp-ffpc-class.php:161
msgid ""
"The *original* request URI as received from the client including the args"
msgstr ""
#: wp-ffpc-class.php:162
msgid "Name of user, authenticated by the Auth Basic Module"
msgstr ""
#: wp-ffpc-class.php:163
msgid "PHP Session Cookie ID, if set ( empty if not )"
msgstr ""
#: wp-ffpc-class.php:164
msgid "First HTTP Accept Lang set in the HTTP request"
msgstr ""
#: wp-ffpc-class.php:174
msgid "do not use timed precache"
msgstr "non utilizzare il precache temporizzato"
#: wp-ffpc-class.php:221
msgid "WP-FFPC Settings"
msgstr "WP-FFPC Impostazioni"
#: wp-ffpc-class.php:226
msgid ""
"WP_CACHE is disabled. Without that, cache plugins, like this, will not work. "
"Please add `define ( 'WP_CACHE', true );` to the beginning of wp-config.php."
msgstr ""
#: wp-ffpc-class.php:230
#, php-format
msgid ""
"This site was reached as %s ( according to PHP HTTP_HOST ) and there are no "
"settings present for this domain in the WP-FFPC configuration yet. Please "
"save the %s for the domain or fix the webserver configuration!"
msgstr ""
#: wp-ffpc-class.php:234
#, php-format
msgid ""
"Advanced cache file (%s) is not writeable!<br />Please change the "
"permissions on the file."
msgstr ""
#: wp-ffpc-class.php:238
#, php-format
msgid "Advanced cache file is yet to be generated, please save %s"
msgstr ""
#: wp-ffpc-class.php:243
#, php-format
msgid ""
"%s cache backend activated but no PHP %s extension was found.<br />Please "
"either use different backend or activate the module!"
msgstr ""
#: wp-ffpc-class.php:254
msgid ""
"WARNING: Memcache extension is configured to use binary mode. This is very "
"buggy and the plugin will most probably not work correctly. <br />Please "
"consider to change either to ASCII mode or to Memcached extension."
msgstr ""
#: wp-ffpc-class.php:307
msgid ""
"WP-FFPC settings were upgraded; please double check if everything is still "
"working correctly."
msgstr ""
#: wp-ffpc-class.php:362
msgid ""
"<p>Please visit <a href=\"http://wordpress.org/support/plugin/wp-ffpc\">the "
"official support forum of the plugin</a> for help.</p>"
msgstr ""
#: wp-ffpc-class.php:386
msgid "<h3>Sample config for nginx to utilize the data entries</h3>"
msgstr ""
#: wp-ffpc-class.php:387
msgid ""
"<div class=\"update-nag\">This is not meant to be a copy-paste "
"configuration; you most probably have to tailor it to your needs.</div>"
msgstr ""
#: wp-ffpc-class.php:388
msgid ""
"<div class=\"update-nag\"><strong>In case you are about to use nginx to "
"fetch memcached entries directly and to use SHA1 hash keys, you will need an "
"nginx version compiled with <a href=\"http://wiki.nginx.org/HttpSetMiscModule"
"\">HttpSetMiscModule</a>. Otherwise set_sha1 function is not available in "
"nginx.</strong></div>"
msgstr ""
#: wp-ffpc-class.php:393
msgid "nginx example"
msgstr "esempio nginx"
#: wp-ffpc-class.php:443
msgid "Settings saved."
msgstr "Impostazioni salvate."
#: wp-ffpc-class.php:450
#, fuzzy
msgid "Plugin options deleted."
msgstr "OPZIONI CANCELLATE!"
#: wp-ffpc-class.php:457
msgid "Cache flushed."
msgstr "Cache svuotata."
#: wp-ffpc-class.php:464
msgid ""
"Precache process was started, it is now running in the background, please be "
"patient, it may take a very long time to finish."
msgstr ""
#: wp-ffpc-class.php:472
msgid " settings"
msgstr " impostazioni"
#: wp-ffpc-class.php:475
msgid "Driver: "
msgstr "Driver: "
#: wp-ffpc-class.php:480
msgid "<strong>Backend status:</strong><br />"
msgstr "<strong>Stato Backend:</strong><br />"
#: wp-ffpc-class.php:490
msgid "<span class=\"error-msg\">down</span><br />"
msgstr ""
#: wp-ffpc-class.php:492
msgid "<span class=\"ok-msg\">up & running</span><br />"
msgstr ""
#: wp-ffpc-class.php:494
msgid ""
"<span class=\"error-msg\">unknown, please try re-saving settings!</span><br /"
">"
msgstr ""
#: wp-ffpc-class.php:513
#, fuzzy
msgid "Set cache type"
msgstr "Tipo di cache:"
#: wp-ffpc-class.php:516
msgid "Select backend"
msgstr "Selezionare un backend:"
#: wp-ffpc-class.php:522
msgid "Select backend storage driver"
msgstr "Selezionare il driver di backend"
#: wp-ffpc-class.php:526
msgid "Expiration time for posts"
msgstr "Tempo di scadenza per Articoli e Pagine"
#: wp-ffpc-class.php:530
msgid ""
"Sets validity time of post entry in seconds, including custom post types and "
"pages."
msgstr ""
#: wp-ffpc-class.php:534
#, fuzzy
msgid "Browser cache expiration time of posts"
msgstr "Tempo di scadenza cache (secondi)"
#: wp-ffpc-class.php:538
msgid "Sets validity time of posts/pages/singles for the browser cache."
msgstr ""
#: wp-ffpc-class.php:542
#, fuzzy
msgid "Expiration time for taxonomy"
msgstr "Tempo di scadenza cache (secondi)"
#: wp-ffpc-class.php:546
msgid ""
"Sets validity time of taxonomy entry in seconds, including custom taxonomy."
msgstr ""
#: wp-ffpc-class.php:550
#, fuzzy
msgid "Browser cache expiration time of taxonomy"
msgstr "Tempo di scadenza cache (secondi)"
#: wp-ffpc-class.php:554
msgid "Sets validity time of taxonomy for the browser cache."
msgstr ""
#: wp-ffpc-class.php:558
msgid "Expiration time for home"
msgstr "Tempo di scadenza per Homepage"
#: wp-ffpc-class.php:562
msgid "Sets validity time of home on server side."
msgstr ""
#: wp-ffpc-class.php:566
#, fuzzy
msgid "Browser cache expiration time of home"
msgstr "Tempo di scadenza cache (secondi)"
#: wp-ffpc-class.php:570
msgid "Sets validity time of home for the browser cache."
msgstr ""
#: wp-ffpc-class.php:574
msgid "Charset"
msgstr "Codifica di caratteri"
#: wp-ffpc-class.php:578
msgid "Charset of HTML and XML (pages and feeds) data."
msgstr ""
#: wp-ffpc-class.php:582
#, fuzzy
msgid "Cache invalidation method"
msgstr "Metodo di spedizione:"
#: wp-ffpc-class.php:588
msgid "Select cache invalidation method."
msgstr ""
#: wp-ffpc-class.php:604
#, fuzzy
msgid "Invalidate on comment actions"
msgstr "Azioni Multiple"
#: wp-ffpc-class.php:608
msgid "Trigger cache invalidation when a comments is posted, edited, trashed. "
msgstr ""
#: wp-ffpc-class.php:612
msgid "Data prefix"
msgstr "Prefisso dati"
#: wp-ffpc-class.php:616
msgid ""
"Prefix for HTML content keys, can be used in nginx.<br /><strong>WARNING</"
"strong>: changing this will result the previous cache to becomes invalid!"
"<br />If you are caching with nginx, you should update your nginx "
"configuration and reload nginx after changing this value."
msgstr ""
#: wp-ffpc-class.php:620
msgid "Meta prefix"
msgstr "Prefisso meta"
#: wp-ffpc-class.php:624
msgid ""
"Prefix for meta content keys, used only with PHP processing.<br /"
"><strong>WARNING</strong>: changing this will result the previous cache to "
"becomes invalid!"
msgstr ""
#: wp-ffpc-class.php:628
msgid "Key scheme"
msgstr "Schema Chiave"
#: wp-ffpc-class.php:632
msgid ""
"Key layout; <strong>use the guide below to change it</strong>.<br /"
"><strong>WARNING</strong>: changing this will result the previous cache to "
"becomes invalid!<br />If you are caching with nginx, you should update your "
"nginx configuration and reload nginx after changing this value."
msgstr ""
#: wp-ffpc-class.php:641
msgid "SHA1 hash key"
msgstr "Hash Chiavi in SHA1"
#: wp-ffpc-class.php:645
msgid ""
"Occasionally URL can be too long to be used as key for the backend storage, "
"especially with memcached. Turn on this feature to use SHA1 hash of the URL "
"as key instead. Please be aware that you have to add ( or uncomment ) a line "
"and a <strong>module</strong> in nginx if you want nginx to fetch the data "
"directly; for details, please see the nginx example tab."
msgstr ""
#: wp-ffpc-class.php:654
msgid "Debug & in-depth settings"
msgstr "Debug & Impostazioni Avanzate"
#: wp-ffpc-class.php:655
msgid "Notes"
msgstr "Note"
#: wp-ffpc-class.php:656
msgid ""
"The former method of debug logging flag has been removed. In case you need "
"debug log from WP-FFPC please set both the <a href=\"http://codex.wordpress."
"org/WP_DEBUG\">WP_DEBUG</a> and the WP_FFPC__DEBUG_MODE constants `true` in "
"wp-config.php.<br /> This will enable NOTICE level messages apart from the "
"WARNING level ones which are always displayed."
msgstr ""
#: wp-ffpc-class.php:660
msgid "Enable X-Pingback header preservation"
msgstr ""
#: wp-ffpc-class.php:664
msgid "Preserve X-Pingback URL in response header."
msgstr ""
#: wp-ffpc-class.php:668
msgid "Add X-Cache-Engine header"
msgstr ""
#: wp-ffpc-class.php:672
msgid "Add X-Cache-Engine HTTP header to HTTP responses."
msgstr ""
#: wp-ffpc-class.php:676
#, fuzzy
msgid "Add HTML debug comment"
msgstr "Aggiungere un nuovo commento"
#: wp-ffpc-class.php:680
msgid ""
"Adds comment string including plugin name, cache engine and page generation "
"time to every generated entry before closing <body> tag."
msgstr ""
#: wp-ffpc-class.php:688
msgid "Set cache additions/excepions"
msgstr ""
#: wp-ffpc-class.php:691
msgid "Enable cache for logged in users"
msgstr "Abilitare la cache per gli utenti registrati"
#: wp-ffpc-class.php:695
msgid "Cache pages even if user is logged in."
msgstr ""
#: wp-ffpc-class.php:699
msgid "Excludes"
msgstr "Esclusioni"
#: wp-ffpc-class.php:704
msgid "Exclude home"
msgstr "Escludi Homepage"
#: wp-ffpc-class.php:705
msgid "Exclude feeds"
msgstr "Escludi Feed"
#: wp-ffpc-class.php:706
msgid "Exclude archives"
msgstr "Escludi Archivi"
#: wp-ffpc-class.php:707
msgid "Exclude pages"
msgstr "Escludi Pagine"
#: wp-ffpc-class.php:708
#, fuzzy
msgid "Exclude singulars"
msgstr "Escludi"
#: wp-ffpc-class.php:709
msgid "Dynamic requests"
msgstr "Richieste dinamiche"
#: wp-ffpc-class.php:710
msgid "WooCommerce"
msgstr "WooCommerce"
#: wp-ffpc-class.php:717
msgid "Never cache home."
msgstr "Nessuna cache per la homepage."
#: wp-ffpc-class.php:721
msgid "Never cache feeds."
msgstr "Nessuna cache per i Feed."
#: wp-ffpc-class.php:725
msgid "Never cache archives."
msgstr "Nessuna cache per gli Archivi."
#: wp-ffpc-class.php:729
msgid "Never cache pages."
msgstr "Nessuna cache per le Pagine."
#: wp-ffpc-class.php:733
#, fuzzy
msgid "Never cache singulars."
msgstr "Cache"
#: wp-ffpc-class.php:737
#, fuzzy
msgid "Exclude every URL with \"?\" in it."
msgstr "Escludi"
#: wp-ffpc-class.php:742
msgid "Exclude dynamic WooCommerce page."
msgstr "Escludere la pagine dinamiche di WooCommerce."
#: wp-ffpc-class.php:750
#, fuzzy
msgid "Exclude based on cookies"
msgstr "Escludi"
#: wp-ffpc-class.php:754
msgid ""
"Exclude content based on cookies names starting with this from caching. "
"Separate multiple cookies names with commas.<br />If you are caching with "
"nginx, you should update your nginx configuration and reload nginx after "
"changing this value."
msgstr ""
#: wp-ffpc-class.php:758
msgid "Don't cache following URL paths - use with caution!"
msgstr ""
#: wp-ffpc-class.php:766
msgid "Regular expressions use you must! e.g. <em>pattern1|pattern2|etc</em>"
msgstr ""
#: wp-ffpc-class.php:770
msgid "Exclude from cache based on content"
msgstr ""
#: wp-ffpc-class.php:774
msgid ""
"Enter a regex pattern that will trigger excluding content from caching. Eg. "
"<!--nocache-->. Regular expressions use you must! e.g. <em>pattern1|pattern2|"
"etc</em><br />\n"
"\t\t\t\t\t<strong>WARNING:</strong> be careful where you display this, "
"because it will apply to any content, including archives, collection pages, "
"singles, anything. If empty, this setting will be ignored."
msgstr ""
#: wp-ffpc-class.php:782
#, fuzzy
msgid "Backend server settings"
msgstr "Impostazioni di backend"
#: wp-ffpc-class.php:785
msgid "Hosts"
msgstr "Host"
#: wp-ffpc-class.php:790
msgid ""
"List of backends, with the following syntax: <br />- in case of TCP based "
"connections, list the servers as host1:port1,host2:port2,... . Do not add "
"trailing , and always separate host and port with : .<br />- for a unix "
"socket enter: unix://[socket_path]"
msgstr ""
#: wp-ffpc-class.php:793
msgid "Authentication ( only for SASL enabled Memcached or Redis)"
msgstr ""
#: wp-ffpc-class.php:796
msgid ""
"WARNING: you've entered username and/or password for memcached "
"authentication ( or your browser's autocomplete did ) which will not work "
"unless you enable memcached sasl in the PHP settings: add `memcached."
"use_sasl=1` to php.ini"
msgstr ""
#: wp-ffpc-class.php:799
#, fuzzy
msgid "Authentication: username"
msgstr "Autenticazione non riuscita"
#: wp-ffpc-class.php:804
#, fuzzy
msgid "Username for authentication with backends"
msgstr "Nome utente"
#: wp-ffpc-class.php:808
#, fuzzy
msgid "Authentication: password"
msgstr "Autenticazione non riuscita"
#: wp-ffpc-class.php:813
msgid ""
"Password for authentication with for backends - WARNING, the password will "
"be stored in an unsecure format!"
msgstr ""
#: wp-ffpc-class.php:816
msgid "Memcached specific settings"
msgstr "Impostazioni specifiche Memcached"
#: wp-ffpc-class.php:818
#, fuzzy
msgid "Enable memcached binary mode"
msgstr "Abilita la modalit&agrave; assistita"
#: wp-ffpc-class.php:822
msgid ""
"Some memcached proxies and implementations only support the ASCII protocol."
msgstr ""
#: wp-ffpc-class.php:830
msgid "Precache settings & log from previous pre-cache generation"
msgstr ""
#: wp-ffpc-class.php:833
msgid "Precache schedule"
msgstr "Pianificazione precache"
#: wp-ffpc-class.php:839
msgid "Schedule autorun for precache with WP-Cron"
msgstr ""
#: wp-ffpc-class.php:860
msgid "No precache log was found!"
msgstr "Non è stato trovato alcun registro precache!"
#: wp-ffpc-class.php:863
msgid "Time of run: "
msgstr ""
#: wp-ffpc-class.php:887
msgid "Save Changes"
msgstr "Salva modifiche"
#: wp-ffpc-class.php:897 wp-ffpc-class.php:903 wp-ffpc-class.php:919
#: wp-ffpc-class.php:930
msgid "Precache"
msgstr ""
#: wp-ffpc-class.php:898
msgid "Empty cache"
msgstr "Svuota la cache"
#: wp-ffpc-class.php:899
msgid "Reset settings"
msgstr "Azzerare impostazioni"
#: wp-ffpc-class.php:907
msgid ""
"Precache functionality is disabled due to unavailable system call function. "
"<br />Since precaching may take a very long time, it's done through a "
"background CLI process in order not to run out of max execution time of PHP. "
"Please enable one of the following functions if you whish to use precaching: "
msgstr ""
#: wp-ffpc-class.php:910
msgid "Pre-cache"
msgstr "Pre-cache"
#: wp-ffpc-class.php:914
msgid ""
"Start a background process that visits all permalinks of all blogs it can "
"found thus forces WordPress to generate cached version of all the pages.<br /"
">The plugin tries to visit links of taxonomy terms without the taxonomy name "
"as well. This may generate 404 hits, please be prepared for these in your "
"logfiles if you plan to pre-cache."
msgstr ""
#: wp-ffpc-class.php:922
msgid "Clear cache"
msgstr "Elimina Cache"
#: wp-ffpc-class.php:925
msgid ""
"Clear all entries in the storage, including the ones that were set by other "
"processes."
msgstr ""
#: wp-ffpc-class.php:933
msgid "Reset options"
msgstr "Ripristina le opzioni"
#: wp-ffpc-class.php:936
#, fuzzy
msgid "Reset settings to defaults."
msgstr "Reimposta impostazioni"
#: wp-ffpc-class.php:947
msgid "Cache type"
msgstr "Tipo di cache:"
#: wp-ffpc-class.php:948
msgid "Debug & in-depth"
msgstr "Debug & Avanzate"
#: wp-ffpc-class.php:949
msgid "Cache exceptions"
msgstr "Eccezioni della cache"
#: wp-ffpc-class.php:950
msgid "Backend settings"
msgstr "Impostazioni di backend"
#: wp-ffpc-class.php:951
msgid "Precache & precache log"
msgstr "Pre-cache & Registro"
#: wp-ffpc-class.php:968
#, fuzzy
msgid "Scheduling WP-CRON event"
msgstr "Ultima esecuzione giornaliera di WP-Cron: %s"
#: wp-ffpc-class.php:972
msgid "Clearing WP-CRON scheduled hook "
msgstr ""
#. Plugin Name of the plugin/theme
msgid "WP-FFPC"
msgstr "WP-FFPC"
#. Plugin URI of the plugin/theme
msgid "https://github.com/petermolnar/wp-ffpc"
msgstr "https://github.com/petermolnar/wp-ffpc"
#. Description of the plugin/theme
msgid "WordPress in-memory full page cache plugin"
msgstr ""
#. Author of the plugin/theme
msgid "Peter Molnar <hello@petermolnar.eu>"
msgstr "Peter Molnar <hello@petermolnar.eu>"
#. Author URI of the plugin/theme
msgid "http://petermolnar.eu/"
msgstr "http://petermolnar.eu/"

735
languages/wp-ffpc.pot Normal file
View file

@ -0,0 +1,735 @@
#, fuzzy
msgid ""
msgstr ""
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
"Project-Id-Version: WP-FFPC\n"
"POT-Creation-Date: 2016-04-21 17:14+0200\n"
"PO-Revision-Date: 2016-04-21 15:44+0200\n"
"Last-Translator: Gabriele Lauricella <gab.lau@gmail.com>\n"
"Language-Team: Gabriele Lauricella <gab.lau@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.8.4\n"
"X-Poedit-Basepath: ..\n"
"X-Poedit-WPHeader: wp-ffpc.php\n"
"X-Poedit-SourceCharset: UTF-8\n"
"X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
"esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
"_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
"X-Poedit-SearchPath-0: .\n"
"X-Poedit-SearchPathExcluded-0: *.js\n"
#: wp-ffpc-abstract.php:381
msgid "Default : "
msgstr ""
#: wp-ffpc-abstract.php:464
msgid ""
"This plugin helped your business? I'd appreciate a coffee in return :) "
"Please!"
msgstr ""
#: wp-ffpc-abstract.php:479
msgid "Donation for "
msgstr ""
#: wp-ffpc-abstract.php:481
msgid "Donate via PayPal"
msgstr ""
#: wp-ffpc-abstract.php:501
#, php-format
msgid " updating network option %s"
msgstr ""
#: wp-ffpc-abstract.php:505
#, php-format
msgid "- updating option %s"
msgstr ""
#: wp-ffpc-abstract.php:516
#, php-format
msgid "- getting network option %s"
msgstr ""
#: wp-ffpc-abstract.php:520
#, php-format
msgid " getting option %s"
msgstr ""
#: wp-ffpc-abstract.php:533
#, php-format
msgid " deleting network option %s"
msgstr ""
#: wp-ffpc-abstract.php:537
#, php-format
msgid " deleting option %s"
msgstr ""
#: wp-ffpc-abstract.php:614
#, php-format
msgid "%s"
msgstr ""
#: wp-ffpc-class.php:126
#, php-format
msgid ""
"Domain mismatch: the site domain configuration (%s) does not match the "
"HTTP_HOST (%s) variable in PHP. Please fix the incorrect one, otherwise the "
"plugin may not work as expected."
msgstr ""
#: wp-ffpc-class.php:134
msgid "APC"
msgstr ""
#: wp-ffpc-class.php:135
msgid "APCu"
msgstr ""
#: wp-ffpc-class.php:136
msgid "PHP Memcache"
msgstr ""
#: wp-ffpc-class.php:137
msgid "PHP Memcached"
msgstr ""
#: wp-ffpc-class.php:138
msgid "Redis (experimental, it will break!)"
msgstr ""
#: wp-ffpc-class.php:152
msgid "flush cache"
msgstr ""
#: wp-ffpc-class.php:153
msgid "only modified post"
msgstr ""
#: wp-ffpc-class.php:154
msgid "modified post and all related taxonomies"
msgstr ""
#: wp-ffpc-class.php:159
msgid "The HTTP scheme (i.e. http, https)."
msgstr ""
#: wp-ffpc-class.php:160
msgid ""
"Host in the header of request or name of the server processing the request "
"if the Host header is not available."
msgstr ""
#: wp-ffpc-class.php:161
msgid ""
"The *original* request URI as received from the client including the args"
msgstr ""
#: wp-ffpc-class.php:162
msgid "Name of user, authenticated by the Auth Basic Module"
msgstr ""
#: wp-ffpc-class.php:163
msgid "PHP Session Cookie ID, if set ( empty if not )"
msgstr ""
#: wp-ffpc-class.php:164
msgid "First HTTP Accept Lang set in the HTTP request"
msgstr ""
#: wp-ffpc-class.php:174
msgid "do not use timed precache"
msgstr ""
#: wp-ffpc-class.php:221
msgid "WP-FFPC Settings"
msgstr ""
#: wp-ffpc-class.php:226
msgid ""
"WP_CACHE is disabled. Without that, cache plugins, like this, will not work. "
"Please add `define ( 'WP_CACHE', true );` to the beginning of wp-config.php."
msgstr ""
#: wp-ffpc-class.php:230
#, php-format
msgid ""
"This site was reached as %s ( according to PHP HTTP_HOST ) and there are no "
"settings present for this domain in the WP-FFPC configuration yet. Please "
"save the %s for the domain or fix the webserver configuration!"
msgstr ""
#: wp-ffpc-class.php:234
#, php-format
msgid ""
"Advanced cache file (%s) is not writeable!<br />Please change the "
"permissions on the file."
msgstr ""
#: wp-ffpc-class.php:238
#, php-format
msgid "Advanced cache file is yet to be generated, please save %s"
msgstr ""
#: wp-ffpc-class.php:243
#, php-format
msgid ""
"%s cache backend activated but no PHP %s extension was found.<br />Please "
"either use different backend or activate the module!"
msgstr ""
#: wp-ffpc-class.php:254
msgid ""
"WARNING: Memcache extension is configured to use binary mode. This is very "
"buggy and the plugin will most probably not work correctly. <br />Please "
"consider to change either to ASCII mode or to Memcached extension."
msgstr ""
#: wp-ffpc-class.php:307
msgid ""
"WP-FFPC settings were upgraded; please double check if everything is still "
"working correctly."
msgstr ""
#: wp-ffpc-class.php:362
msgid ""
"<p>Please visit <a href=\"http://wordpress.org/support/plugin/wp-ffpc\">the "
"official support forum of the plugin</a> for help.</p>"
msgstr ""
#: wp-ffpc-class.php:386
msgid "<h3>Sample config for nginx to utilize the data entries</h3>"
msgstr ""
#: wp-ffpc-class.php:387
msgid ""
"<div class=\"update-nag\">This is not meant to be a copy-paste "
"configuration; you most probably have to tailor it to your needs.</div>"
msgstr ""
#: wp-ffpc-class.php:388
msgid ""
"<div class=\"update-nag\"><strong>In case you are about to use nginx to "
"fetch memcached entries directly and to use SHA1 hash keys, you will need an "
"nginx version compiled with <a href=\"http://wiki.nginx.org/HttpSetMiscModule"
"\">HttpSetMiscModule</a>. Otherwise set_sha1 function is not available in "
"nginx.</strong></div>"
msgstr ""
#: wp-ffpc-class.php:393
msgid "nginx example"
msgstr ""
#: wp-ffpc-class.php:443
msgid "Settings saved."
msgstr ""
#: wp-ffpc-class.php:450
msgid "Plugin options deleted."
msgstr ""
#: wp-ffpc-class.php:457
msgid "Cache flushed."
msgstr ""
#: wp-ffpc-class.php:464
msgid ""
"Precache process was started, it is now running in the background, please be "
"patient, it may take a very long time to finish."
msgstr ""
#: wp-ffpc-class.php:472
msgid " settings"
msgstr ""
#: wp-ffpc-class.php:475
msgid "Driver: "
msgstr ""
#: wp-ffpc-class.php:480
msgid "<strong>Backend status:</strong><br />"
msgstr ""
#: wp-ffpc-class.php:490
msgid "<span class=\"error-msg\">down</span><br />"
msgstr ""
#: wp-ffpc-class.php:492
msgid "<span class=\"ok-msg\">up & running</span><br />"
msgstr ""
#: wp-ffpc-class.php:494
msgid ""
"<span class=\"error-msg\">unknown, please try re-saving settings!</span><br /"
">"
msgstr ""
#: wp-ffpc-class.php:513
msgid "Set cache type"
msgstr ""
#: wp-ffpc-class.php:516
msgid "Select backend"
msgstr ""
#: wp-ffpc-class.php:522
msgid "Select backend storage driver"
msgstr ""
#: wp-ffpc-class.php:526
msgid "Expiration time for posts"
msgstr ""
#: wp-ffpc-class.php:530
msgid ""
"Sets validity time of post entry in seconds, including custom post types and "
"pages."
msgstr ""
#: wp-ffpc-class.php:534
msgid "Browser cache expiration time of posts"
msgstr ""
#: wp-ffpc-class.php:538
msgid "Sets validity time of posts/pages/singles for the browser cache."
msgstr ""
#: wp-ffpc-class.php:542
msgid "Expiration time for taxonomy"
msgstr ""
#: wp-ffpc-class.php:546
msgid ""
"Sets validity time of taxonomy entry in seconds, including custom taxonomy."
msgstr ""
#: wp-ffpc-class.php:550
msgid "Browser cache expiration time of taxonomy"
msgstr ""
#: wp-ffpc-class.php:554
msgid "Sets validity time of taxonomy for the browser cache."
msgstr ""
#: wp-ffpc-class.php:558
msgid "Expiration time for home"
msgstr ""
#: wp-ffpc-class.php:562
msgid "Sets validity time of home on server side."
msgstr ""
#: wp-ffpc-class.php:566
msgid "Browser cache expiration time of home"
msgstr ""
#: wp-ffpc-class.php:570
msgid "Sets validity time of home for the browser cache."
msgstr ""
#: wp-ffpc-class.php:574
msgid "Charset"
msgstr ""
#: wp-ffpc-class.php:578
msgid "Charset of HTML and XML (pages and feeds) data."
msgstr ""
#: wp-ffpc-class.php:582
msgid "Cache invalidation method"
msgstr ""
#: wp-ffpc-class.php:588
msgid "Select cache invalidation method."
msgstr ""
#: wp-ffpc-class.php:604
msgid "Invalidate on comment actions"
msgstr ""
#: wp-ffpc-class.php:608
msgid "Trigger cache invalidation when a comments is posted, edited, trashed. "
msgstr ""
#: wp-ffpc-class.php:612
msgid "Data prefix"
msgstr ""
#: wp-ffpc-class.php:616
msgid ""
"Prefix for HTML content keys, can be used in nginx.<br /><strong>WARNING</"
"strong>: changing this will result the previous cache to becomes invalid!"
"<br />If you are caching with nginx, you should update your nginx "
"configuration and reload nginx after changing this value."
msgstr ""
#: wp-ffpc-class.php:620
msgid "Meta prefix"
msgstr ""
#: wp-ffpc-class.php:624
msgid ""
"Prefix for meta content keys, used only with PHP processing.<br /"
"><strong>WARNING</strong>: changing this will result the previous cache to "
"becomes invalid!"
msgstr ""
#: wp-ffpc-class.php:628
msgid "Key scheme"
msgstr ""
#: wp-ffpc-class.php:632
msgid ""
"Key layout; <strong>use the guide below to change it</strong>.<br /"
"><strong>WARNING</strong>: changing this will result the previous cache to "
"becomes invalid!<br />If you are caching with nginx, you should update your "
"nginx configuration and reload nginx after changing this value."
msgstr ""
#: wp-ffpc-class.php:641
msgid "SHA1 hash key"
msgstr ""
#: wp-ffpc-class.php:645
msgid ""
"Occasionally URL can be too long to be used as key for the backend storage, "
"especially with memcached. Turn on this feature to use SHA1 hash of the URL "
"as key instead. Please be aware that you have to add ( or uncomment ) a line "
"and a <strong>module</strong> in nginx if you want nginx to fetch the data "
"directly; for details, please see the nginx example tab."
msgstr ""
#: wp-ffpc-class.php:654
msgid "Debug & in-depth settings"
msgstr ""
#: wp-ffpc-class.php:655
msgid "Notes"
msgstr ""
#: wp-ffpc-class.php:656
msgid ""
"The former method of debug logging flag has been removed. In case you need "
"debug log from WP-FFPC please set both the <a href=\"http://codex.wordpress."
"org/WP_DEBUG\">WP_DEBUG</a> and the WP_FFPC__DEBUG_MODE constants `true` in "
"wp-config.php.<br /> This will enable NOTICE level messages apart from the "
"WARNING level ones which are always displayed."
msgstr ""
#: wp-ffpc-class.php:660
msgid "Enable X-Pingback header preservation"
msgstr ""
#: wp-ffpc-class.php:664
msgid "Preserve X-Pingback URL in response header."
msgstr ""
#: wp-ffpc-class.php:668
msgid "Add X-Cache-Engine header"
msgstr ""
#: wp-ffpc-class.php:672
msgid "Add X-Cache-Engine HTTP header to HTTP responses."
msgstr ""
#: wp-ffpc-class.php:676
msgid "Add HTML debug comment"
msgstr ""
#: wp-ffpc-class.php:680
msgid ""
"Adds comment string including plugin name, cache engine and page generation "
"time to every generated entry before closing <body> tag."
msgstr ""
#: wp-ffpc-class.php:688
msgid "Set cache additions/excepions"
msgstr ""
#: wp-ffpc-class.php:691
msgid "Enable cache for logged in users"
msgstr ""
#: wp-ffpc-class.php:695
msgid "Cache pages even if user is logged in."
msgstr ""
#: wp-ffpc-class.php:699
msgid "Excludes"
msgstr ""
#: wp-ffpc-class.php:704
msgid "Exclude home"
msgstr ""
#: wp-ffpc-class.php:705
msgid "Exclude feeds"
msgstr ""
#: wp-ffpc-class.php:706
msgid "Exclude archives"
msgstr ""
#: wp-ffpc-class.php:707
msgid "Exclude pages"
msgstr ""
#: wp-ffpc-class.php:708
msgid "Exclude singulars"
msgstr ""
#: wp-ffpc-class.php:709
msgid "Dynamic requests"
msgstr ""
#: wp-ffpc-class.php:710
msgid "WooCommerce"
msgstr ""
#: wp-ffpc-class.php:717
msgid "Never cache home."
msgstr ""
#: wp-ffpc-class.php:721
msgid "Never cache feeds."
msgstr ""
#: wp-ffpc-class.php:725
msgid "Never cache archives."
msgstr ""
#: wp-ffpc-class.php:729
msgid "Never cache pages."
msgstr ""
#: wp-ffpc-class.php:733
msgid "Never cache singulars."
msgstr ""
#: wp-ffpc-class.php:737
msgid "Exclude every URL with \"?\" in it."
msgstr ""
#: wp-ffpc-class.php:742
msgid "Exclude dynamic WooCommerce page."
msgstr ""
#: wp-ffpc-class.php:750
msgid "Exclude based on cookies"
msgstr ""
#: wp-ffpc-class.php:754
msgid ""
"Exclude content based on cookies names starting with this from caching. "
"Separate multiple cookies names with commas.<br />If you are caching with "
"nginx, you should update your nginx configuration and reload nginx after "
"changing this value."
msgstr ""
#: wp-ffpc-class.php:758
msgid "Don't cache following URL paths - use with caution!"
msgstr ""
#: wp-ffpc-class.php:766
msgid "Regular expressions use you must! e.g. <em>pattern1|pattern2|etc</em>"
msgstr ""
#: wp-ffpc-class.php:770
msgid "Exclude from cache based on content"
msgstr ""
#: wp-ffpc-class.php:774
msgid ""
"Enter a regex pattern that will trigger excluding content from caching. Eg. "
"<!--nocache-->. Regular expressions use you must! e.g. <em>pattern1|pattern2|"
"etc</em><br />\n"
"\t\t\t\t\t<strong>WARNING:</strong> be careful where you display this, "
"because it will apply to any content, including archives, collection pages, "
"singles, anything. If empty, this setting will be ignored."
msgstr ""
#: wp-ffpc-class.php:782
msgid "Backend server settings"
msgstr ""
#: wp-ffpc-class.php:785
msgid "Hosts"
msgstr ""
#: wp-ffpc-class.php:790
msgid ""
"List of backends, with the following syntax: <br />- in case of TCP based "
"connections, list the servers as host1:port1,host2:port2,... . Do not add "
"trailing , and always separate host and port with : .<br />- for a unix "
"socket enter: unix://[socket_path]"
msgstr ""
#: wp-ffpc-class.php:793
msgid "Authentication ( only for SASL enabled Memcached or Redis)"
msgstr ""
#: wp-ffpc-class.php:796
msgid ""
"WARNING: you've entered username and/or password for memcached "
"authentication ( or your browser's autocomplete did ) which will not work "
"unless you enable memcached sasl in the PHP settings: add `memcached."
"use_sasl=1` to php.ini"
msgstr ""
#: wp-ffpc-class.php:799
msgid "Authentication: username"
msgstr ""
#: wp-ffpc-class.php:804
msgid "Username for authentication with backends"
msgstr ""
#: wp-ffpc-class.php:808
msgid "Authentication: password"
msgstr ""
#: wp-ffpc-class.php:813
msgid ""
"Password for authentication with for backends - WARNING, the password will "
"be stored in an unsecure format!"
msgstr ""
#: wp-ffpc-class.php:816
msgid "Memcached specific settings"
msgstr ""
#: wp-ffpc-class.php:818
msgid "Enable memcached binary mode"
msgstr ""
#: wp-ffpc-class.php:822
msgid ""
"Some memcached proxies and implementations only support the ASCII protocol."
msgstr ""
#: wp-ffpc-class.php:830
msgid "Precache settings & log from previous pre-cache generation"
msgstr ""
#: wp-ffpc-class.php:833
msgid "Precache schedule"
msgstr ""
#: wp-ffpc-class.php:839
msgid "Schedule autorun for precache with WP-Cron"
msgstr ""
#: wp-ffpc-class.php:860
msgid "No precache log was found!"
msgstr ""
#: wp-ffpc-class.php:863
msgid "Time of run: "
msgstr ""
#: wp-ffpc-class.php:887
msgid "Save Changes"
msgstr ""
#: wp-ffpc-class.php:897 wp-ffpc-class.php:903 wp-ffpc-class.php:919
#: wp-ffpc-class.php:930
msgid "Precache"
msgstr ""
#: wp-ffpc-class.php:898
msgid "Empty cache"
msgstr ""
#: wp-ffpc-class.php:899
msgid "Reset settings"
msgstr ""
#: wp-ffpc-class.php:907
msgid ""
"Precache functionality is disabled due to unavailable system call function. "
"<br />Since precaching may take a very long time, it's done through a "
"background CLI process in order not to run out of max execution time of PHP. "
"Please enable one of the following functions if you whish to use precaching: "
msgstr ""
#: wp-ffpc-class.php:910
msgid "Pre-cache"
msgstr ""
#: wp-ffpc-class.php:914
msgid ""
"Start a background process that visits all permalinks of all blogs it can "
"found thus forces WordPress to generate cached version of all the pages.<br /"
">The plugin tries to visit links of taxonomy terms without the taxonomy name "
"as well. This may generate 404 hits, please be prepared for these in your "
"logfiles if you plan to pre-cache."
msgstr ""
#: wp-ffpc-class.php:922
msgid "Clear cache"
msgstr ""
#: wp-ffpc-class.php:925
msgid ""
"Clear all entries in the storage, including the ones that were set by other "
"processes."
msgstr ""
#: wp-ffpc-class.php:933
msgid "Reset options"
msgstr ""
#: wp-ffpc-class.php:936
msgid "Reset settings to defaults."
msgstr ""
#: wp-ffpc-class.php:947
msgid "Cache type"
msgstr ""
#: wp-ffpc-class.php:948
msgid "Debug & in-depth"
msgstr ""
#: wp-ffpc-class.php:949
msgid "Cache exceptions"
msgstr ""
#: wp-ffpc-class.php:950
msgid "Backend settings"
msgstr ""
#: wp-ffpc-class.php:951
msgid "Precache & precache log"
msgstr ""
#: wp-ffpc-class.php:968
msgid "Scheduling WP-CRON event"
msgstr ""
#: wp-ffpc-class.php:972
msgid "Clearing WP-CRON scheduled hook "
msgstr ""
#. Plugin Name of the plugin/theme
msgid "WP-FFPC"
msgstr ""
#. Plugin URI of the plugin/theme
msgid "https://github.com/petermolnar/wp-ffpc"
msgstr ""
#. Description of the plugin/theme
msgid "WordPress in-memory full page cache plugin"
msgstr ""
#. Author of the plugin/theme
msgid "Peter Molnar <hello@petermolnar.eu>"
msgstr ""
#. Author URI of the plugin/theme
msgid "http://petermolnar.eu/"
msgstr ""

View file

@ -1,81 +1,72 @@
=== WP-FFPC ===
Contributors: cadeyrn, ameir, haroldkyle, plescheff, dkcwd, IgorCode
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
Contributors: cadeyrn
Tags: cache, nginx, memcached, apc
Requires at least: 3.0
Tested up to: 4.1
Stable tag: 1.7.9
Tested up to: 4.7.2
Stable tag: 1.11.2
License: GPLv3
License URI: http://www.gnu.org/licenses/gpl-3.0.html
The fastest way to cache: use the memory!
A fast, memory based full page cache plugin supporting APC or memcached.
== 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.
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.
**WARNING** The development of WP-FFPC had been put on hold.
If you need new features, please send code and pull requests to [WP FFPC @ Github](https://github.com/petermolnar/wp-ffpc).
= IMPORTANT NOTES, PLEASE READ THIS LIST =
*A short why: I developed this plugin in 2010 to support my own site. Right now, as it is, it's working on a few sites I still maintain for friends and since I don't need any additional features, I'm not planning to extend it with things I have no real use of. During the past years I've received some heartwarming donations - unfortunately the amount never came close to consider the project financially beneficial. I removed the donation links and put it on hold for now.*
* Requirements:
* WordPress >= 3.0
* **at least one** of the following for storage backend:
WP-FFPC is a cache plugin for [WordPress](http://wordpress.org/ "WordPress").
It works with any webserver, including, but not limited to, apache2, lighttpd, nginx.
It can be configured together with [NGiNX](http://NGiNX.org "NGiNX") but use [memcached plugin](http://nginx.org/en/docs/http/ngx_http_memcached_module.html "memcached plugin") directly from the webserver, bypassing PHP.
= Requirements =
**This plugin does not kick in right after activation**. You have to adjust the setting in Settings -> WP-FFPC and save the settings.*
* WordPress >= 3.0
* **at least one** of the following for storage backend:
* memcached with [PHP Memcached](http://php.net/manual/en/book.memcached.php "Memcached") > 0.1.0
* memcached with [PHP Memcache](http://php.net/manual/en/book.memcache.php "Memcache") > 2.1.0
* [APC](http://php.net/manual/en/book.apc.php "APC")
* [APCu](http://pecl.php.net/package/APCu "APC User Cache")
* PHP 5.3+ is really highly recommended, see "Known issues"
* This plugin does kick in right after activation. You have to adjust the setting in Settings -> WP-FFPC.*
* PHP 5.3+ is really highly recommended, see "Known issues"
= Known issues =
* errors will not be displayed on the admin section if PHP < 5.3, only in the logs. This is due to the limitations of displaying the errors ( admin_notices is a hook, not a filter ) and due to the lack of proper anonymus functions in older PHP. PHP 5.3 is 5 years old, so it's time to upgrade.
* APC with PHP 5.4 is buggy; the plugin with that setup can even make your site slower. Please use APCu or memcached if you're using PHP >= 5.4
* errors will not be displayed on the admin section if PHP < 5.3, only in the logs. This is due to the limitations of displaying the errors ( admin_notices is a hook, not a filter ) and due to the lack of proper anonymus functions in older PHP.
* **If you're using PHP 5.4+ avoid the APC backend: the plugin with that setup can even make your site slower.** Please use APCu or memcached in this case.
= Features: =
* Wordpress Network support
* fully supported domain/subdomain based WordPress Networks on per site setup as well
* will work in Network Enabled mode only for subdirectory based Multisites ( per site settings will not work in this case )
* supports various backends
* various backends
* memcached with [PHP Memcached](http://php.net/manual/en/book.memcached.php "Memcached")
* memcached with [PHP Memcache](http://php.net/manual/en/book.memcache.php "Memcache")
* [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 options ( home, feeds, archieves, pages, singles; regex based url exclusion )
* cache exclude options ( home, feeds, archives, pages, singles; regex based url exclusion )
* minor Woocommerce support
* (optional) cache for logged-in users
* 404 caching
* canonical redirects caching
* Last Modified HTTP header support ( for 304 responses )
* Last Modified HTTP header support (for 304 responses)
* shortlink HTTP header preservation
* 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 )
* varying expiration time for posts, taxonomies and home
* (**warning**: untested since WordPress 3.8) Wordpress Network support
* fully supported domain/subdomain based WordPress Networks on per site setup as well
* will work in Network Enabled mode only for subdirectory based Multisites ( per site settings will not work in this case )
Many thanks for donations, contributors, supporters, testers & bug reporters:
* [Harold Kyle](https://github.com/haroldkyle)
* [Eric Gilette](http://www.ericgillette.com/)
* [doconeill](http://wordpress.org/support/profile/doconeill)
* Mark Costlow
* Jason Miller
* [Dave Clark](https://github.com/dkcwd)
* Miguel Clara
* [Anton Pelešev](https://github.com/plescheff)
* Firas Dib
* [CotswoldPhoto](http://wordpress.org/support/profile/cotswoldphoto)
* [tamagokun](https://github.com/tamagokun)
* Many Ayromlou
* mailgarant.nl
* Christian Rößner
* [Ameir Abdeldayem](https://github.com/ameir)
* [Alvaro Gonzalez](https://github.com/andor-pierdelacabeza)
* Meint Post
Harold Kyle, Eric Gilette, doconeill, Mark Costlow, Jason Miller, Dave Clark, Miguel Clara, Anton Pelešev, Firas Dib, CotswoldPhoto, tamagokun, Many Ayromlou, mailgarant.nl, Christian Rößner, Ameir Abdeldayem, Alvaro Gonzalez, Meint Post, Knut Sparhell, Christian Kernbeis, Gausden Barry, Maksim Bukreyeu, Lissome Hong Kong Limited, Gabriele Lauricella, 7th Veil, LLC, Julia Harsch, Grant Berntsen, Jorgen Ilstad, Cinema Minima for Movie Makers Worldwide
== Installation ==
@ -92,22 +83,27 @@ A short configuration example is generated on the plugin settings page, under `N
== Frequently Asked Questions ==
= How to use the plugin on Amazon Linux? =
You have to remove the default yum package, named `php-pecl-memcache` and install `Memcached` through PECL.
= The plugin is not working! =
= How to use the plugin in a WordPress Network =
From version 1.0, the plugin supports subdomain based WordPress Network with possible different per site cache settings. If the plugin is network active, obviously the network wide settings will be used for all of the sites. If it's activated only on some of the sites, the other will not be affected and even the cache storage backend can be different from site to site.
Did you save the settings as mentioned in this document?
Do you have at lest one supported backend?
= How logging works in the plugin? =
Log levels by default ( if logging enabled ) includes warning and error level standard PHP messages.
Additional info level log is available when [WP_DEBUG](http://codex.wordpress.org/WP_DEBUG "WP_DEBUG") is enabled.
= It's making my site slower than it was! =
= How can I contribute? =
In order to make contributions a lot easier, I've moved the plugin development to [GitHub](https://github.com/petermolnar/wp-ffpc "GitHub"), feel free to fork and put shiny, new things in it and get in touch with me [hello@petermolnar.eu](mailto:hello@petermolnar.eu "hello@petermolnar.eu") when you have it ready.
So far this only happened if PHP 5.4 or higher was used with APC.
Please avoid this setup; PHP 5.4 shipped opcache and APC is full of bugs since then. Use APCu with PHP 5.4+.
= Does it support mobile theme switching? =
No, it doesn't, and with the way it's currently working, it never will.
WP-FFPC is using the URL as key for caching, so it can't differentiate if there is no change in the URL.
*(I personally also disagree with separation of mobile and non-mobile theme; you need to support a plethora of screen sizes and resolutions, so just use responsive designs instead of splitted logics.)*
= Can you please add '(insert shiny new feature here)'? =
Sure. Send me a code and a pull request on [WP FFPC @ Github](https://github.com/petermolnar/wp-ffpc).
Unfortunately I don't have the resources to code it myself, but there are plenty of WordPress developers who would probably do it for a minor fee.
= Where can I turn for support? =
I provide support for the plugin as best as I can, but it comes without guarantee.
Please post feature requests to [WP-FFPC feature request topic](http://wordpress.org/support/topic/feature-requests-14 "WP-FFPC feature request topic") and any questions on the forum.
== Screenshots ==
@ -125,6 +121,93 @@ Version numbering logic:
* every .B version indicates new features.
* every ..C indicates bugfixes for A.B version.
= 1.11.2 =
*2017-02-08*
* annoying typos in text
= 1.11.1 =
*2017-02-08*
* exclude cache for WooCommerce
* fix load textdomain
* add Italian (it_IT) translation
* nonexistent redis support removed (it never got to a usable stable state, mostly due to the chaos with the redis php modules)
* readme cleaned up for development hibernation
* donation link removed
* WP version compatibility bumped
= 1.11.0 =
*2016-01-15*
* merged filter for HTML before it hits the cache
* refactored logging
= 1.10.1 =
*2015-10-30*
* fixed nginx configuration sample snippets
* nginx configuration moved from Settings tab to Help tab, so if you're looking for the "nginx" tab, you need to look under "Help" on the WP-FFPC Settings page.
= 1.10.0 =
*2015-10-23*
*IMPORTANT, READ THIS*
* Proper browser cache support:
* new options to set real browser cache expiry for singles, taxonomy and home
* added Etag support based on browser cache expiry
* added proper Expires header according to cache entry generation time + browser cache expiry
* added support for Last Modified header for home & taxonomy ( singles already had it) based on the last post modified date within the taxonomy
= 1.9.1 =
*2015-10-18*
* bugfix for is_writable check failures ( see: https://wordpress.org/support/topic/settings-saved-but-getting-not-saved-error-message)
* bugfix for memcached.protocol notice
* typo fixes
* replace variable with string constant in translatable messages
= 1.9.0 =
*2015-10-14*
* adding exclude option based on text entry matching ( regex )
= 1.8.4 =
*2015-10-13*
* changes in HTML debug comment: instead of the former, single comment, now 2 comments are added. The first is added when the cache entry is generated; the second only appears if the page was served from the cached entry. Please note that this last bit will - should - change with every single refresh.
* backend code is now split into separate files
* more debug code
= 1.8.3 =
*2015-05-07*
* small change in key creation: prefix is kept in front of sha1 hashes for debugging purposes
= 1.8.2 =
*2015-04-30*
* sha1 key hashing made to be optional
* added additional debug condition of WP_FFPC__DEBUG_MODE constant to be `true`
= 1.8.1 =
*2015-04-29*
* fixing the wrong release of 1.8.0
= 1.8.0 =
*2015-04-29*
What's new:
* backend keys are now sha1 hashes instead of full url; this is to prevent too long key error with memcached
Under the hood:
* wp-common is removed; no more git submodules
* logging method changed
= 1.7.9 =
*2015-02-02*
@ -504,4 +587,4 @@ There are major problems with the "memcache" driver, the source is yet unkown. T
= 0.1 =
*2012-02-16*
* first public release
* first public release

View file

@ -13,5 +13,3 @@ include_once ( 'wp-ffpc.php' );
/* run uninstall function */
$wp_ffpc->plugin_uninstall();
?>

194
wp-admin.css Normal file
View file

@ -0,0 +1,194 @@
.plugin-admin dt {
margin-top: 2em;
font-weight:bold;
}
.plugin-admin fieldset {
display:block;
margin: 0;
padding: 0 1em 0 1em;
border: 1px solid #ccc;
}
.plugin-admin legend {
display: none;
visibility: hidden;
}
.plugin-admin .description {
display: block;
padding-top: 0.3em;
}
.plugin-admin .tabs {
padding:0;
margin: 0;
list-style-type: none;
}
.plugin-admin .tabs li {
border-style: solid;
border-width: 1px 1px 1px 1px;
border-color: #ccc;
border-bottom-color: #ccc;
line-height: 120%;
display: inline-block;
padding: 0.5em 2em 0.5em 2em;
text-decoration: none;
margin-bottom: -1px;
-webkit-border-top-left-radius: 3px;
-webkit-border-top-right-radius: 3px;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
background: #f1f1f1;
background-image: -webkit-gradient(linear,left bottom,left top,from(#ececec),to(#f9f9f9));
background-image: -webkit-linear-gradient(bottom,#ececec,#f9f9f9);
background-image: -moz-linear-gradient(bottom,#ececec,#f9f9f9);
background-image: -o-linear-gradient(bottom,#ececec,#f9f9f9);
background-image: linear-gradient(to top,#ececec,#f9f9f9);
}
.plugin-admin .tabs li a {
outline: none;
text-decoration: none;
font-size: 120%;
}
.plugin-admin .tabs li.ui-state-active {
background: #fff;
border-bottom-color: #fff;
}
.error p {
font-weight: bold;
}
.error-msg {
color: #990000;
}
.ok-msg {
color: #009900;
}
.clear {
clear:both;
}
.wp-ffpc-donation {
padding: 0.8em;
border: 1px solid #ccc;
background-color: #f6f6f6;
-webkit-border-radius: 3px;
border-radius: 3px;
}
.wp-ffpc-donation * {
display: inline;
line-height: 2em;
}
.wp-ffpc-donation .currency {
padding: 0 0 0 0.3em;
}
.wp-ffpc-donation .submit {
display: inline-block;
width: 74px;
height: 21px;
}
.wp-ffpc-donation .ui-slider {
position: relative;
text-align: left;
display: inline-block;
width: 16em;
margin: 0 2em 0 2em;
height: 0.4em;
background-color: #111;
border: 1px solid #ccc;
-webkit-border-radius: 3px;
border-radius: 3px;
background: #f1f1f1;
}
.wp-ffpc-donation .ui-slider .ui-slider-handle {
position: absolute;
z-index: 2;
width: 1.2em;
height: 1.2em;
margin-top: -0.4em;
cursor: default;
border: 1px solid #ccc;
-webkit-border-radius: 3px;
border-radius: 3px;
background: #f1f1f1;
background-image: -webkit-gradient(linear,left bottom,left top,from(#ececec),to(#f9f9f9));
background-image: -webkit-linear-gradient(bottom,#ececec,#f9f9f9);
background-image: -moz-linear-gradient(bottom,#ececec,#f9f9f9);
background-image: -o-linear-gradient(bottom,#ececec,#f9f9f9);
background-image: linear-gradient(to top,#ececec,#f9f9f9);
outline: none;
}
.button-warning {
display: inline-block;
text-decoration: none;
font-size: 12px;
line-height: 23px;
height: 24px;
margin: 0;
padding: 0 10px 1px;
cursor: pointer;
border-width: 1px;
border-style: solid;
-webkit-border-radius: 3px;
-webkit-appearance: none;
border-radius: 3px;
white-space: nowrap;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: #f3f3f3;
background-image: -webkit-gradient(linear, left top, left bottom, from(#fefefe), to(#f4f4f4));
background-image: -webkit-linear-gradient(top, #fefefe, #f4f4f4);
background-image: -moz-linear-gradient(top, #fefefe, #f4f4f4);
background-image: -o-linear-gradient(top, #fefefe, #f4f4f4);
background-image: linear-gradient(to bottom, #fefefe, #f4f4f4);
border-color: #bbb;
color: #900;
text-shadow: 0 1px 0 #fff;
}
.button-warning:hover,
.button-warning:focus {
background: #f3f3f3;
background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f3f3f3));
background-image: -webkit-linear-gradient(top, #fff, #f3f3f3);
background-image: -moz-linear-gradient(top, #fff, #f3f3f3);
background-image: -ms-linear-gradient(top, #fff, #f3f3f3);
background-image: -o-linear-gradient(top, #fff, #f3f3f3);
background-image: linear-gradient(to bottom, #fff, #f3f3f3);
border-color: #900;
color: #a00;
-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,.2);
box-shadow: 1px 1px 1px rgba(0,0,0,.2);
}
.button-warning:active {
background: #eee;
background-image: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#fefefe));
background-image: -webkit-linear-gradient(top, #f4f4f4, #fefefe);
background-image: -moz-linear-gradient(top, #f4f4f4, #fefefe);
background-image: -ms-linear-gradient(top, #f4f4f4, #fefefe);
background-image: -o-linear-gradient(top, #f4f4f4, #fefefe);
background-image: linear-gradient(to bottom, #f4f4f4, #fefefe);
border-color: #900;
color: #a00;
text-shadow: 0 -1px 0 #fff;
-webkit-box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 );
box-shadow: inset 0 2px 5px -3px rgba( 0, 0, 0, 0.5 );
}

@ -1 +0,0 @@
Subproject commit a355960827c466a01a00f3d4e04c6ee812594c37

629
wp-ffpc-abstract.php Normal file
View file

@ -0,0 +1,629 @@
<?php
defined('ABSPATH') or die("Walk away.");
/* __ only availabe if we're running from the inside of wordpress, not in advanced-cache.php phase */
if ( !function_exists ('__translate__') ) {
/* __ only availabe if we're running from the inside of wordpress, not in advanced-cache.php phase */
if ( function_exists ( '__' ) ) {
function __translate__ ( $text, $domain ) { return __($text, $domain); }
}
else {
function __translate__ ( $text, $domain ) { return $text; }
}
}
if ( !function_exists ('__debug__') ) {
/* __ only availabe if we're running from the inside of wordpress, not in advanced-cache.php phase */
function __debug__ ( $text ) {
if ( defined('WP_FFPC__DEBUG_MODE') && WP_FFPC__DEBUG_MODE == true)
error_log ( __FILE__ . ': ' . $text );
}
}
if (!class_exists('WP_FFPC_ABSTRACT')):
/**
* abstract class for common, required functionalities
*
*/
abstract class WP_FFPC_ABSTRACT {
const slug_save = '&saved=true';
const slug_delete = '&deleted=true';
const common_slug = 'wp-common/';
protected $plugin_constant;
protected $options = array();
protected $defaults = array();
protected $status = 0;
protected $network = false;
protected $settings_link = '';
protected $settings_slug = '';
protected $plugin_url;
protected $plugin_dir;
protected $common_url;
protected $common_dir;
protected $plugin_file;
protected $plugin_name;
protected $plugin_version;
protected $plugin_settings_page;
protected $button_save;
protected $button_delete;
protected $capability = 'manage_options';
protected $admin_css_handle;
protected $admin_css_url;
protected $utils = null;
protected $donation_business_name;
protected $donation_item_name;
protected $donation_business_id;
protected $donation = false;
/**
* constructor
*
* @param string $plugin_constant General plugin identifier, same as directory & base PHP file name
* @param string $plugin_version Version number of the parameter
* @param string $plugin_name Readable name of the plugin
* @param mixed $defaults Default value(s) for plugin option(s)
* @param string $donation_link Donation link of plugin
*
*/
public function __construct( $plugin_constant, $plugin_version, $plugin_name, $defaults, $donation_business_name = false, $donation_item_name = false, $donation_business_id = false ) {
$this->plugin_constant = $plugin_constant;
$this->plugin_file = $this->plugin_constant . '/' . $this->plugin_constant . '.php';
$this->plugin_version = $plugin_version;
$this->plugin_name = $plugin_name;
$this->defaults = $defaults;
$this->plugin_settings_page = $this->plugin_constant .'-settings';
$this->button_save = $this->plugin_constant . '-save';
$this->button_delete = $this->plugin_constant . '-delete';
if ( !empty( $donation_business_name ) && !empty( $donation_item_name ) && !empty( $donation_business_id ) ) {
$this->donation_business_name = $donation_business_name;
$this->donation_item_name = $donation_item_name;
$this->donation_business_id = $donation_business_id;
$this->donation = true;
}
//$this->utils = new PluginUtils();
/* we need network wide plugin check functions */
if ( ! function_exists( 'is_plugin_active_for_network' ) )
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
/* check if plugin is network-activated */
if ( @is_plugin_active_for_network ( $this->plugin_file ) ) {
$this->network = true;
$this->settings_slug = 'settings.php';
}
else {
$this->settings_slug = 'options-general.php';
}
/* set the settings page link string */
$this->settings_link = $this->settings_slug . '?page=' . $this->plugin_settings_page;
/* initialize plugin, plugin specific init functions */
$this->plugin_post_construct();
add_action( 'init', array(&$this,'plugin_init'));
add_action( 'admin_enqueue_scripts', array(&$this,'enqueue_admin_css_js'));
add_action( 'plugins_loaded', array(&$this,'plugin_load_textdomain'));
}
/**
* activation hook function, to be extended
*/
abstract function plugin_activate();
/**
* deactivation hook function, to be extended
*/
abstract function plugin_deactivate ();
/**
* runs within the __construct, after all the initial settings
*/
abstract function plugin_post_construct();
/**
* first init hook function, to be extended, before options were read
*/
abstract function plugin_pre_init();
/**
* second init hook function, to be extended, after options were read
*/
abstract function plugin_post_init();
public function plugin_init() {
/* initialize plugin, plugin specific init functions */
$this->plugin_pre_init();
/* get the options */
$this->plugin_options_read();
register_activation_hook( $this->plugin_file , array( &$this, 'plugin_activate' ) );
register_deactivation_hook( $this->plugin_file , array( &$this, 'plugin_deactivate' ) );
/* register settings pages */
if ( $this->network )
add_filter( "network_admin_plugin_action_links_" . $this->plugin_file, array( &$this, 'plugin_settings_link' ) );
else
add_filter( "plugin_action_links_" . $this->plugin_file, array( &$this, 'plugin_settings_link' ) );
/* register admin init, catches $_POST and adds submenu to admin menu */
if ( $this->network )
add_action('network_admin_menu', array( &$this , 'plugin_admin_init') );
else
add_action('admin_menu', array( &$this , 'plugin_admin_init') );
add_filter('contextual_help', array( &$this, 'plugin_admin_help' ), 10, 2);
/* setup plugin, plugin specific setup functions that need options */
$this->plugin_post_init();
}
/**
* admin panel, load plugin textdomain
*/
public function plugin_load_textdomain() {
load_plugin_textdomain( 'wp-ffpc', false , dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
/**
* admin panel, the HTML usually
*/
abstract function plugin_admin_panel();
/**
* admin help menu
*/
abstract function plugin_admin_help( $contextual_help, $screen_id );
/**
* admin init called by WordPress add_action, needs to be public
*/
public function plugin_admin_init() {
/* save parameter updates, if there are any */
if ( isset( $_POST[ $this->button_save ] ) && check_admin_referer( 'wp-ffpc') ) {
$this->plugin_options_save();
$this->status = 1;
header( "Location: ". $this->settings_link . self::slug_save );
}
/* delete parameters if requested */
if ( isset( $_POST[ $this->button_delete ] ) && check_admin_referer( 'wp-ffpc') ) {
$this->plugin_options_delete();
$this->status = 2;
header( "Location: ". $this->settings_link . self::slug_delete );
}
/* load additional moves */
$this->plugin_extend_admin_init();
/* add submenu to settings pages */
add_submenu_page( $this->settings_slug, $this->plugin_name . __translate__( ' options' , 'wp-ffpc'), $this->plugin_name, $this->capability, $this->plugin_settings_page, array ( &$this , 'plugin_admin_panel' ) );
}
/**
* to be extended
*
*/
abstract function plugin_extend_admin_init();
/**
* callback function to add settings link to plugins page
*
* @param array $links Current links to add ours to
*
*/
public function plugin_settings_link ( $links ) {
$settings_link = '<a href="' . $this->settings_link . '">' . __translate__( 'Settings', 'wp-ffpc') . '</a>';
array_unshift( $links, $settings_link );
return $links;
}
/* add admin styling */
public function enqueue_admin_css_js(){
/* jquery ui tabs is provided by WordPress */
wp_enqueue_script ( "jquery-ui-tabs" );
wp_enqueue_script ( "jquery-ui-slider" );
/* additional admin styling */
wp_register_style( $this->admin_css_handle, $this->admin_css_url, array('dashicons'), false, 'all' );
wp_enqueue_style( $this->admin_css_handle );
}
/**
* deletes saved options from database
*/
protected function plugin_options_delete () {
static::_delete_option ( $this->plugin_constant, $this->network );
/* additional moves */
$this->plugin_extend_options_delete();
}
/**
* hook to add functionality into plugin_options_read
*/
abstract function plugin_extend_options_delete ();
/**
* reads options stored in database and reads merges them with default values
*/
protected function plugin_options_read () {
$options = static::_get_option ( $this->plugin_constant, $this->network );
/* this is the point to make any migrations from previous versions */
$this->plugin_options_migrate( $options );
/* map missing values from default */
foreach ( $this->defaults as $key => $default )
if ( !@array_key_exists ( $key, $options ) )
$options[$key] = $default;
/* removed unused keys, rare, but possible */
foreach ( @array_keys ( $options ) as $key )
if ( !@array_key_exists( $key, $this->defaults ) )
unset ( $options[$key] );
/* any additional read hook */
$this->plugin_extend_options_read( $options );
$this->options = $options;
}
/**
* hook for parameter migration, runs right after options read from DB
*/
abstract function plugin_options_migrate( &$options );
/**
* hook to add functionality into plugin_options_read, runs after defaults check
*/
abstract function plugin_extend_options_read ( &$options );
/**
* used on update and to save current options to database
*
* @param boolean $activating [optional] true on activation hook
*
*/
protected function plugin_options_save ( $activating = false ) {
/* only try to update defaults if it's not activation hook, $_POST is not empty and the post
is ours */
if ( !$activating && !empty ( $_POST ) && isset( $_POST[ $this->button_save ] ) ) {
/* we'll only update those that exist in the defaults array */
$options = $this->defaults;
foreach ( $options as $key => $default )
{
/* $_POST element is available */
if ( !empty( $_POST[$key] ) ) {
$update = $_POST[$key];
/* get rid of slashes in strings, just in case */
if ( is_string ( $update ) )
$update = stripslashes($update);
$options[$key] = $update;
}
/* empty $_POST element: when HTML form posted, empty checkboxes a 0 input
values will not be part of the $_POST array, thus we need to check
if this is the situation by checking the types of the elements,
since a missing value means update from an integer to 0
*/
elseif ( empty( $_POST[$key] ) && ( is_bool ( $default ) || is_int( $default ) ) ) {
$options[$key] = 0;
}
elseif ( empty( $_POST[$key] ) && is_array( $default) ) {
$options[$key] = array();
}
}
/* update the options array */
$this->options = $options;
}
/* set plugin version */
$this->options['version'] = $this->plugin_version;
/* call hook function for additional moves before saving the values */
$this->plugin_extend_options_save( $activating );
/* save options to database */
static::_update_option ( $this->plugin_constant , $this->options, $this->network );
}
/**
* hook to add functionality into plugin_options_save
*/
abstract function plugin_extend_options_save ( $activating );
/**
* function to easily print a variable
*
* @param mixed $var Variable to dump
* @param boolean $ret Return text instead of printing if true
*
*/
protected function print_var ( $var , $ret = false ) {
if ( @is_array ( $var ) || @is_object( $var ) || @is_bool( $var ) )
$var = var_export ( $var, true );
if ( $ret )
return $var;
else
echo $var;
}
/**
* print value of an element from defaults array
*
* @param mixed $e Element index of $this->defaults array
*
*/
protected function print_default ( $e ) {
_e('Default : ', 'wp-ffpc');
$select = 'select_' . $e;
if ( @is_array ( $this->$select ) ) {
$x = $this->$select;
$this->print_var ( $x[ $this->defaults[ $e ] ] );
}
else {
$this->print_var ( $this->defaults[ $e ] );
}
}
/**
* select options field processor
*
* @param elements
* array to build <option> values of
*
* @param $current
* the current active element
*
* @param $print
* boolean: is true, the options will be printed, otherwise the string will be returned
*
* @return
* prints or returns the options string
*
*/
protected function print_select_options ( $elements, $current, $valid = false, $print = true ) {
if ( is_array ( $valid ) )
$check_disabled = true;
else
$check_disabled = false;
$opt = '';
foreach ($elements as $value => $name ) {
//$disabled .= ( @array_key_exists( $valid[ $value ] ) && $valid[ $value ] == false ) ? ' disabled="disabled"' : '';
$opt .= '<option value="' . $value . '" ';
$opt .= selected( $value , $current );
// ugly tree level valid check to prevent array warning messages
if ( is_array( $valid ) && isset ( $valid [ $value ] ) && $valid [ $value ] == false )
$opt .= ' disabled="disabled"';
$opt .= '>';
$opt .= $name;
$opt .= "</option>\n";
}
if ( $print )
echo $opt;
else
return $opt;
}
/**
* creates PayPal donation form based on plugin details
*
*/
protected function plugin_donation_form () {
if ( $this->donation ) :
?>
<script>
jQuery(document).ready(function($) {
jQuery(function() {
var select = $( "#amount" );
var slider = $( '<div id="donation-slider"></div>' ).insertAfter( select ).slider({
min: 1,
max: 8,
range: "min",
value: select[ 0 ].selectedIndex + 1,
slide: function( event, ui ) {
select[ 0 ].selectedIndex = ui.value - 1;
}
});
$( "#amount" ).change(function() {
slider.slider( "value", this.selectedIndex + 1 );
});
});
});
</script>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" class="<?php echo $this->plugin_constant ?>-donation">
<label for="amount"><?php _e( "This plugin helped your business? I'd appreciate a coffee in return :) Please!", 'wp-ffpc'); ?></label>
<select name="amount" id="amount">
<option value="3">3$</option>
<option value="5">5$</option>
<option value="10" selected="selected">10$</option>
<option value="15">15$</option>
<option value="30">30$</option>
<option value="42">42$</option>
<option value="75">75$</option>
<option value="100">100$</option>
</select>
<input type="hidden" id="cmd" name="cmd" value="_donations" />
<input type="hidden" id="tax" name="tax" value="0" />
<input type="hidden" id="business" name="business" value="<?php echo $this->donation_business_id ?>" />
<input type="hidden" id="bn" name="bn" value="<?php echo $this->donation_business_name ?>" />
<input type="hidden" id="item_name" name="item_name" value="<?php _e('Donation for ', 'wp-ffpc'); echo $this->donation_item_name ?>" />
<input type="hidden" id="currency_code" name="currency_code" value="USD" />
<input type="submit" name="submit" value="<?php _e('Donate via PayPal', 'wp-ffpc') ?>" class="button-secondary" />
</form>
<?php
endif;
}
public function getoption ( $key ) {
return ( empty ( $this->options[ $key] ) ) ? false : $this->options[ $key];
}
/**
* UTILS
*/
/**
* option update; will handle network wide or standalone site options
*
*/
public static function _update_option ( $optionID, $data, $network = false ) {
if ( $network ) {
static::debug( sprintf( __( ' updating network option %s', 'PluginUtils' ), $optionID ) );
update_site_option( $optionID , $data );
}
else {
static::debug( sprintf( __( '- updating option %s', 'PluginUtils' ), $optionID ));
update_option( $optionID , $data );
}
}
/**
* read option; will handle network wide or standalone site options
*
*/
public static function _get_option ( $optionID, $network = false ) {
if ( $network ) {
static::debug ( sprintf( __( '- getting network option %s', 'PluginUtils' ), $optionID ) );
$options = get_site_option( $optionID );
}
else {
static::debug( sprintf( __( ' getting option %s', 'PluginUtils' ), $optionID ));
$options = get_option( $optionID );
}
return $options;
}
/**
* clear option; will handle network wide or standalone site options
*
*/
public static function _delete_option ( $optionID, $network = false ) {
if ( $network ) {
static::debug ( sprintf( __( ' deleting network option %s', 'PluginUtils' ), $optionID ) );
delete_site_option( $optionID );
}
else {
static::debug ( sprintf( __( ' deleting option %s', 'PluginUtils' ), $optionID ) );
delete_option( $optionID );
}
}
/**
* read option; will handle network wide or standalone site options
*
*/
public static function _site_url ( $site = '', $network = false ) {
if ( $network && !empty( $site ) )
$url = get_blog_option ( $site, 'siteurl' );
else
$url = get_bloginfo ( 'url' );
return $url;
}
/**
* replaces http:// with https:// in an url if server is currently running on https
*
* @param string $url URL to check
*
* @return string URL with correct protocol
*
*/
public static function replace_if_ssl ( $url ) {
if ( isset( $_SERVER['HTTP_X_FORWARDED_PROTO'] ) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https' )
$_SERVER['HTTPS'] = 'on';
if ( isset($_SERVER['HTTPS']) && (( strtolower($_SERVER['HTTPS']) == 'on' ) || ( $_SERVER['HTTPS'] == '1' ) ))
$url = str_replace ( 'http://' , 'https://' , $url );
return $url;
}
/**
*/
static function debug( $message, $level = LOG_NOTICE ) {
if ( @is_array( $message ) || @is_object ( $message ) )
$message = json_encode($message);
switch ( $level ) {
case LOG_ERR :
wp_die( '<h1>Error:</h1>' . '<p>' . $message . '</p>' );
exit;
default:
if ( !defined( 'WP_DEBUG' ) || WP_DEBUG != true || !defined( 'WP_FFPC__DEBUG_MODE' ) || WP_FFPC__DEBUG_MODE != true )
return;
break;
}
error_log( __CLASS__ . ": " . $message );
}
/**
* display formatted alert message
*
* @param string $msg Error message
* @param string $error "level" of error
* @param boolean $network WordPress network or not, DEPRECATED
*
*/
static public function alert ( $msg, $level=LOG_WARNING, $network=false ) {
if ( empty($msg)) return false;
switch ($level) {
case LOG_ERR:
case LOG_WARNING:
$css = "error";
break;
default:
$css = "updated";
break;
}
$r = '<div class="'. $css .'"><p>'. sprintf ( __('%s', 'PluginUtils' ), $msg ) .'</p></div>';
if ( version_compare(phpversion(), '5.3.0', '>=')) {
add_action('admin_notices', function() use ($r) { echo $r; }, 10 );
}
else {
global $tmp;
$tmp = $r;
$f = create_function ( '', 'global $tmp; echo $tmp;' );
add_action('admin_notices', $f );
}
static::debug( $msg, $level );
}
}
endif;

View file

@ -1,51 +1,89 @@
<?php
defined('ABSPATH') or die("Walk away.");
/**
* advanced cache worker of WordPress plugin WP-FFPC
*/
function __wp_ffpc_debug__ ( $text ) {
if ( defined('WP_FFPC__DEBUG_MODE') && WP_FFPC__DEBUG_MODE == true)
error_log ( 'WP_FFPC_ACache' . ': ' . $text );
}
/* check for WP cache enabled*/
if ( !WP_CACHE )
if ( !defined('WP_CACHE') || WP_CACHE != true ) {
__wp_ffpc_debug__('WP_CACHE is not true');
return false;
}
/* no cache for post request (comments, plugins and so on) */
if ($_SERVER["REQUEST_METHOD"] == 'POST')
if ($_SERVER["REQUEST_METHOD"] == 'POST') {
__wp_ffpc_debug__('POST requests are never cached');
return false;
}
/**
* Try to avoid enabling the cache if sessions are managed
* with request parameters and a session is active
*/
if (defined('SID') && SID != '')
if (defined('SID') && SID != '') {
__wp_ffpc_debug__('SID found, skipping cache');
return false;
}
/* check for config */
if (!isset($wp_ffpc_config))
if (!isset($wp_ffpc_config)) {
__wp_ffpc_debug__('wp_ffpc_config variable not found');
return false;
}
/* request uri */
$wp_ffpc_uri = $_SERVER['REQUEST_URI'];
/* no cache for robots.txt */
if ( stripos($wp_ffpc_uri, 'robots.txt') )
if ( stripos($wp_ffpc_uri, 'robots.txt') ) {
__wp_ffpc_debug__ ( 'Skippings robots.txt hit');
return false;
}
/* multisite files can be too large for memcached */
if ( function_exists('is_multisite') && stripos($wp_ffpc_uri, '/files/') && is_multisite() )
if ( function_exists('is_multisite') && stripos($wp_ffpc_uri, '/files/') && is_multisite() ) {
__wp_ffpc_debug__ ( 'Skippings multisite /files/ hit');
return false;
}
/* check if config is network active: use network config */
if (!empty ( $wp_ffpc_config['network'] ) )
if (!empty ( $wp_ffpc_config['network'] ) ) {
$wp_ffpc_config = $wp_ffpc_config['network'];
__wp_ffpc_debug__('using "network" level config');
}
/* check if config is active for site : use site config */
elseif ( !empty ( $wp_ffpc_config[ $_SERVER['HTTP_HOST'] ] ) )
elseif ( !empty ( $wp_ffpc_config[ $_SERVER['HTTP_HOST'] ] ) ) {
$wp_ffpc_config = $wp_ffpc_config[ $_SERVER['HTTP_HOST'] ];
__wp_ffpc_debug__("using {$_SERVER['HTTP_HOST']} level config");
}
/* plugin config not found :( */
else
else {
__wp_ffpc_debug__("no usable config found");
return false;
}
/* no cache for WooCommerce URL patterns */
if ( isset($wp_ffpc_config['nocache_woocommerce']) && !empty($wp_ffpc_config['nocache_woocommerce']) &&
isset($wp_ffpc_config['nocache_woocommerce_url']) && trim($wp_ffpc_config['nocache_woocommerce_url']) ) {
$pattern = sprintf('#%s#', trim($wp_ffpc_config['nocache_woocommerce_url']));
if ( preg_match($pattern, $wp_ffpc_uri) ) {
__wp_ffpc_debug__ ( "Cache exception based on WooCommenrce URL regex pattern matched, skipping");
return false;
}
}
/* no cache for uri with query strings, things usually go bad that way */
if ( isset($wp_ffpc_config['nocache_dyn']) && !empty($wp_ffpc_config['nocache_dyn']) && stripos($wp_ffpc_uri, '?') !== false )
if ( isset($wp_ffpc_config['nocache_dyn']) && !empty($wp_ffpc_config['nocache_dyn']) && stripos($wp_ffpc_uri, '?') !== false ) {
__wp_ffpc_debug__ ( 'Dynamic url cache is disabled ( url with "?" ), skipping');
return false;
}
/* check for cookies that will make us not cache the content, like logged in WordPress cookie */
if ( isset($wp_ffpc_config['nocache_cookies']) && !empty($wp_ffpc_config['nocache_cookies']) ) {
@ -56,6 +94,7 @@ if ( isset($wp_ffpc_config['nocache_cookies']) && !empty($wp_ffpc_config['nocach
/* check for any matches to user-added cookies to no-cache */
foreach ( $nocache_cookies as $nocache_cookie ) {
if( strpos( $n, $nocache_cookie ) === 0 ) {
__wp_ffpc_debug__ ( "Cookie exception matched: {$n}, skipping");
return false;
}
}
@ -67,17 +106,19 @@ if ( isset($wp_ffpc_config['nocache_cookies']) && !empty($wp_ffpc_config['nocach
if ( isset($wp_ffpc_config['nocache_url']) && trim($wp_ffpc_config['nocache_url']) ) {
$pattern = sprintf('#%s#', trim($wp_ffpc_config['nocache_url']));
if ( preg_match($pattern, $wp_ffpc_uri) ) {
__wp_ffpc_debug__ ( "Cache exception based on URL regex pattern matched, skipping");
return false;
}
}
/* canonical redirect storage */
$wp_ffpc_redirect = null;
/* fires up the backend storage array with current config */
include_once ('wp-ffpc-backend.php');
$wp_ffpc_backend = new WP_FFPC_Backend( $wp_ffpc_config );
$backend_class = 'WP_FFPC_Backend_' . $wp_ffpc_config['cache_type'];
$wp_ffpc_backend = new $backend_class ( $wp_ffpc_config );
//$wp_ffpc_backend = new WP_FFPC_Backend( $wp_ffpc_config );
/* no cache for for logged in users unless it's set
identifier cookies are listed in backend as var for easier usage
@ -87,30 +128,34 @@ if ( !isset($wp_ffpc_config['cache_loggedin']) || $wp_ffpc_config['cache_loggedi
foreach ($_COOKIE as $n=>$v) {
foreach ( $wp_ffpc_backend->cookies as $nocache_cookie ) {
if( strpos( $n, $nocache_cookie ) === 0 ) {
__wp_ffpc_debug__ ( "No cache for cookie: {$n}, skipping");
return false;
}
}
}
}
/* will store time of page generation */
$wp_ffpc_gentime = 0;
/* backend connection failed, no caching :( */
if ( $wp_ffpc_backend->status() === false )
if ( $wp_ffpc_backend->status() === false ) {
__wp_ffpc_debug__ ( "Backend offline");
return false;
}
/* try to get data & meta keys for current page */
$wp_ffpc_keys = array ( 'meta' => $wp_ffpc_config['prefix_meta'], 'data' => $wp_ffpc_config['prefix_data'] );
$wp_ffpc_values = array();
__wp_ffpc_debug__ ( "Trying to fetch entries");
foreach ( $wp_ffpc_keys as $internal => $key ) {
$key = $wp_ffpc_backend->key ( $key );
$value = $wp_ffpc_backend->get ( $key );
if ( ! $value ) {
__wp_ffpc_debug__("No cached data found");
/* does not matter which is missing, we need both, if one fails, no caching */
wp_ffpc_start();
return;
@ -118,11 +163,13 @@ foreach ( $wp_ffpc_keys as $internal => $key ) {
else {
/* store results */
$wp_ffpc_values[ $internal ] = $value;
__wp_ffpc_debug__('Got value for ' . $internal);
}
}
/* serve cache 404 status */
if ( isset( $wp_ffpc_values['meta']['status'] ) && $wp_ffpc_values['meta']['status'] == 404 ) {
__wp_ffpc_debug__("Serving 404");
header("HTTP/1.1 404 Not Found");
/* if I kill the page serving here, the 404 page will not be showed at all, so we do not do that
* flush();
@ -132,6 +179,7 @@ if ( isset( $wp_ffpc_values['meta']['status'] ) && $wp_ffpc_values['meta']['sta
/* server redirect cache */
if ( isset( $wp_ffpc_values['meta']['redirect'] ) && $wp_ffpc_values['meta']['redirect'] ) {
__wp_ffpc_debug__("Serving redirect to {$wp_ffpc_values['meta']['redirect']}");
header('Location: ' . $wp_ffpc_values['meta']['redirect'] );
/* cut the connection as fast as possible */
flush();
@ -143,6 +191,7 @@ if ( array_key_exists( "HTTP_IF_MODIFIED_SINCE" , $_SERVER ) && !empty( $wp_ffpc
$if_modified_since = strtotime(preg_replace('/;.*$/', '', $_SERVER["HTTP_IF_MODIFIED_SINCE"]));
/* check is cache is still valid */
if ( $if_modified_since >= $wp_ffpc_values['meta']['lastmodified'] ) {
__wp_ffpc_debug__("Serving 304 Not Modified");
header("HTTP/1.0 304 Not Modified");
/* connection cut for faster serving */
flush();
@ -156,31 +205,68 @@ if ( array_key_exists( "HTTP_IF_MODIFIED_SINCE" , $_SERVER ) && !empty( $wp_ffpc
if (!empty ( $wp_ffpc_values['meta']['mime'] ) )
header('Content-Type: ' . $wp_ffpc_values['meta']['mime']);
/* don't allow browser caching of page */
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0');
header('Pragma: no-cache');
/* set expiry date */
if (isset($wp_ffpc_values['meta']['expire']) && !empty ( $wp_ffpc_values['meta']['expire'] ) ) {
$hash = md5 ( $wp_ffpc_uri . $wp_ffpc_values['meta']['expire'] );
/* expire at this very moment */
header('Expires: ' . gmdate("D, d M Y H:i:s", time() ) . " GMT");
switch ($wp_ffpc_values['meta']['type']) {
case 'home':
case 'feed':
$expire = $wp_ffpc_config['browsercache_home'];
break;
case 'archive':
$expire = $wp_ffpc_config['browsercache_taxonomy'];
break;
case 'single':
$expire = $wp_ffpc_config['browsercache'];
break;
default:
$expire = 0;
}
header('Cache-Control: public,max-age='.$expire.',s-maxage='.$expire.',must-revalidate');
header('Expires: ' . gmdate("D, d M Y H:i:s", $wp_ffpc_values['meta']['expire'] ) . " GMT");
header('ETag: '. $hash);
unset($expire, $hash);
}
else {
/* in case there is no expiry set, expire immediately and don't serve Etag; browser cache is disabled */
header('Expires: ' . gmdate("D, d M Y H:i:s", time() ) . " GMT");
/* if I set these, the 304 not modified will never, ever kick in, so not setting these
* leaving here as a reminder why it should not be set */
//header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0, s-maxage=0, post-check=0, pre-check=0');
//header('Pragma: no-cache');
}
/* if shortlinks were set */
if (!empty ( $wp_ffpc_values['meta']['shortlink'] ) )
if (isset($wp_ffpc_values['meta']['shortlink']) && !empty ( $wp_ffpc_values['meta']['shortlink'] ) )
header( 'Link:<'. $wp_ffpc_values['meta']['shortlink'] .'>; rel=shortlink' );
/* if last modifications were set (for posts & pages) */
if ( !empty($wp_ffpc_values['meta']['lastmodified']) )
if (isset($wp_ffpc_values['meta']['lastmodified']) && !empty($wp_ffpc_values['meta']['lastmodified']) )
header( 'Last-Modified: ' . gmdate("D, d M Y H:i:s", $wp_ffpc_values['meta']['lastmodified'] ). " GMT" );
/* pingback urls, if existx */
if ( !empty( $wp_ffpc_values['meta']['pingback'] ) && $wp_ffpc_config['pingback_header'] )
if ( isset($wp_ffpc_values['meta']['pingback']) && !empty( $wp_ffpc_values['meta']['pingback'] ) && isset($wp_ffpc_config['pingback_header']) && $wp_ffpc_config['pingback_header'] )
header( 'X-Pingback: ' . $wp_ffpc_values['meta']['pingback'] );
/* for debugging */
if ( $wp_ffpc_config['response_header'] )
if ( isset($wp_ffpc_config['response_header']) && $wp_ffpc_config['response_header'] )
header( 'X-Cache-Engine: WP-FFPC with ' . $wp_ffpc_config['cache_type'] .' via PHP');
/* HTML data */
echo $wp_ffpc_values['data'];
if ( isset($wp_ffpc_config['generate_time']) && $wp_ffpc_config['generate_time'] == '1' && stripos($wp_ffpc_values['data'], '</body>') ) {
$mtime = explode ( " ", microtime() );
$wp_ffpc_gentime = ( $mtime[1] + $mtime[0] ) - $wp_ffpc_gentime;
$insertion = "\n<!-- WP-FFPC cache output stats\n\tcache engine: ". $wp_ffpc_config['cache_type'] ."\n\tUNIX timestamp: ". time() . "\n\tdate: ". date( 'c' ) . "\n\tfrom server: ". $_SERVER['SERVER_ADDR'] . " -->\n";
$index = stripos( $wp_ffpc_values['data'] , '</body>' );
$wp_ffpc_values['data'] = substr_replace( $wp_ffpc_values['data'], $insertion, $index, 0);
}
__wp_ffpc_debug__("Serving data");
echo trim($wp_ffpc_values['data']);
flush();
die();
@ -243,18 +329,99 @@ function wp_ffpc_callback( $buffer ) {
if (strlen($buffer) == 0)
return '';
if ( is_home() )
$meta['type'] = 'home';
elseif (is_feed() )
$meta['type'] = 'feed';
elseif ( is_archive() )
if ( isset($wp_ffpc_config[ 'nocache_comment' ]) && !empty($wp_ffpc_config[ 'nocache_comment' ]) && trim($wp_ffpc_config[ 'nocache_comment' ])) {
$pattern = sprintf('#%s#', trim($wp_ffpc_config['nocache_comment']));
__wp_ffpc_debug__ ( sprintf("Testing comment with pattern: %s", $pattern));
if ( preg_match($pattern, $buffer) ) {
__wp_ffpc_debug__ ( "Cache exception based on content regex pattern matched, skipping");
return $buffer;
}
}
if ( is_home() || is_feed() ) {
if (is_home())
$meta['type'] = 'home';
elseif(is_feed())
$meta['type'] = 'feed';
if (isset($wp_ffpc_config['browsercache_home']) && !empty($wp_ffpc_config['browsercache_home']) && $wp_ffpc_config['browsercache_home'] > 0) {
$meta['expire'] = time() + $wp_ffpc_config['browsercache_home'];
}
__wp_ffpc_debug__( 'Getting latest post for for home & feed');
/* get newest post and set last modified accordingly */
$args = array(
'numberposts' => 1,
'orderby' => 'modified',
'order' => 'DESC',
'post_status' => 'publish',
);
$recent_post = wp_get_recent_posts( $args, OBJECT );
if ( !empty($recent_post)) {
$recent_post = array_pop($recent_post);
if (!empty ( $recent_post->post_modified_gmt ) ) {
$meta['lastmodified'] = strtotime ( $recent_post->post_modified_gmt );
}
}
}
elseif ( is_archive() ) {
$meta['type'] = 'archive';
elseif ( is_single() )
if (isset($wp_ffpc_config['browsercache_taxonomy']) && !empty($wp_ffpc_config['browsercache_taxonomy']) && $wp_ffpc_config['browsercache_taxonomy'] > 0) {
$meta['expire'] = time() + $wp_ffpc_config['browsercache_taxonomy'];
}
global $wp_query;
if ( null != $wp_query->tax_query && !empty($wp_query->tax_query)) {
__wp_ffpc_debug__( 'Getting latest post for taxonomy: ' . json_encode($wp_query->tax_query));
$args = array(
'numberposts' => 1,
'orderby' => 'modified',
'order' => 'DESC',
'post_status' => 'publish',
'tax_query' => $wp_query->tax_query,
);
$recent_post = get_posts( $args, OBJECT );
if ( !empty($recent_post)) {
$recent_post = array_pop($recent_post);
if (!empty ( $recent_post->post_modified_gmt ) ) {
$meta['lastmodified'] = strtotime ( $recent_post->post_modified_gmt );
}
}
}
}
elseif ( is_single() || is_page() ) {
$meta['type'] = 'single';
elseif ( is_page() )
$meta['type'] = 'page';
else
if (isset($wp_ffpc_config['browsercache']) && !empty($wp_ffpc_config['browsercache']) && $wp_ffpc_config['browsercache'] > 0) {
$meta['expire'] = time() + $wp_ffpc_config['browsercache'];
}
/* try if post is available
if made with archieve, last listed post can make this go bad
*/
global $post;
if ( !empty($post) && !empty ( $post->post_modified_gmt ) ) {
/* get last modification data */
$meta['lastmodified'] = strtotime ( $post->post_modified_gmt );
/* get shortlink, if possible */
if (function_exists('wp_get_shortlink')) {
$shortlink = wp_get_shortlink( );
if (!empty ( $shortlink ) )
$meta['shortlink'] = $shortlink;
}
}
}
else {
$meta['type'] = 'unknown';
}
if ( $meta['type'] != 'unknown' ) {
/* check if caching is disabled for page type */
@ -282,46 +449,42 @@ function wp_ffpc_callback( $buffer ) {
/* set mimetype */
$meta['mime'] = $meta['mime'] . $wp_ffpc_config['charset'];
/* try if post is available
if made with archieve, last listed post can make this go bad
*/
global $post;
if ( !empty($post) && ( $meta['type'] == 'single' || $meta['type'] == 'page' ) && !empty ( $post->post_modified_gmt ) ) {
/* get last modification data */
$meta['lastmodified'] = strtotime ( $post->post_modified_gmt );
/* get shortlink, if possible */
if (function_exists('wp_get_shortlink')) {
$shortlink = wp_get_shortlink( );
if (!empty ( $shortlink ) )
$meta['shortlink'] = $shortlink;
}
}
/* store pingback url if pingbacks are enabled */
if ( get_option ( 'default_ping_status' ) == 'open' )
$meta['pingback'] = get_bloginfo('pingback_url');
$to_store = $buffer;
/* add generation info is option is set, but only to HTML */
if ( $wp_ffpc_config['generate_time'] == '1' && stripos($buffer, '</body>') ) {
global $wp_ffpc_gentime;
$mtime = explode ( " ", microtime() );
$wp_ffpc_gentime = ( $mtime[1] + $mtime[0] )- $wp_ffpc_gentime;
$insertion = "\n<!-- \nWP-FFPC \n\tcache engine: ". $wp_ffpc_config['cache_type'] ."\n\tpage generation time: ". round( $wp_ffpc_gentime, 3 ) ." seconds\n\tgeneraton UNIX timestamp: ". time() . "\n\tgeneraton date: ". date( 'c' ) . "\n\tserver: ". $_SERVER['SERVER_ADDR'] . "\n-->\n";
$insertion = "\n<!-- WP-FFPC cache generation stats" . "\n\tgeneration time: ". round( $wp_ffpc_gentime, 3 ) ." seconds\n\tgeneraton UNIX timestamp: ". time() . "\n\tgeneraton date: ". date( 'c' ) . "\n\tgenerator server: ". $_SERVER['SERVER_ADDR'] . " -->\n";
$index = stripos( $buffer , '</body>' );
$buffer = substr_replace( $buffer, $insertion, $index, 0);
$to_store = substr_replace( $buffer, $insertion, $index, 0);
}
/**
* Allows to edit the content to be stored in cache.
*
* This hooks allows the user to edit the page content right before it is about
* to be stored in the cache. This could be useful for alterations like
* minification.
*
* @since 1.10.2
*
* @param string $to_store The content to be stored in cache.
*/
$to_store = apply_filters( 'wp-ffpc-to-store', $to_store );
$prefix_meta = $wp_ffpc_backend->key ( $wp_ffpc_config['prefix_meta'] );
$wp_ffpc_backend->set ( $prefix_meta, $meta );
$prefix_data = $wp_ffpc_backend->key ( $wp_ffpc_config['prefix_data'] );
//if ( $wp_ffpc_config['gzip'] && function_exists('gzencode') )
$wp_ffpc_backend->set ( $prefix_data , $buffer );
$wp_ffpc_backend->set ( $prefix_data , $to_store );
if ( !empty( $meta['status'] ) && $meta['status'] == 404 ) {
header("HTTP/1.1 404 Not Found");
@ -332,8 +495,6 @@ function wp_ffpc_callback( $buffer ) {
}
/* echoes HTML out */
return $buffer;
return trim($buffer);
}
/*** END GENERATING CACHE ENTRY ***/
?>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,112 +1,107 @@
http {
# --- contents of {nginx config dir, usuall /etc/nginx}/fastcgi_params ---
fastcgi_param SCRIPT_NAME $script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param SSL_PROTOCOL $ssl_protocol if_not_empty;
fastcgi_param SSL_CIPHER $ssl_cipher if_not_empty;
fastcgi_param SSL_SESSION_ID $ssl_session_id if_not_empty;
fastcgi_param SSL_CLIENT_VERIFY $ssl_client_verify if_not_empty;
fastcgi_param REDIRECT_STATUS 200;
fastcgi_index index.php;
fastcgi_connect_timeout 10;
fastcgi_send_timeout 360;
fastcgi_read_timeout 3600;
fastcgi_buffer_size 512k;
fastcgi_buffers 512 512k;
fastcgi_intercept_errors on;
# memcached servers, generated according to wp-ffpc config
upstream memcached-servers {
# --- part needs to go inside the http { } block of nginx ---
# --- memcached ---
upstream memcached {
MEMCACHED_SERVERS
}
}
# PHP-FPM upstream; change it accordingly to your local config!
upstream php-fpm {
server 127.0.0.1:9000;
}
# --- PHP-FPM upstream --- change it accordingly to your local config!
upstream php-fpm {
server 127.0.0.1:9000;
}
server {
## Listen ports
listen 80;
listen [::]:80;
# use _ if you want to accept everything, or replace _ with domain
server_name _;
# --- part needs to go inside the server { } block of nginx ---
set $memcached_raw_key KEYFORMAT;
# root of WordPress
root SERVERROOT;
HASHEDORNOT
# set up logging
access_log /var/log/nginx/SERVERLOG.access.log;
error_log /var/log/nginx/SERVERLOG.error.log;
set $memcached_request 1;
## PHP5-FPM
location ~ (\.php) {
# these settings are usually in fastcgi_params
if ($request_method = POST ) {
set $memcached_request 0;
}
fastcgi_index index.php;
fastcgi_connect_timeout 10;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 512k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 512k;
fastcgi_temp_file_write_size 512k;
fastcgi_intercept_errors on;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_keep_conn on;
if ( $uri ~ "/wp-" ) {
set $memcached_request 0;
}
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param REDIRECT_STATUS 200;
if ( $args ) {
set $memcached_request 0;
}
# uncomment these for HTTPS usage
#fastcgi_param HTTPS $https if_not_empty;
#fastcgi_param SSL_PROTOCOL $ssl_protocol if_not_empty;
#fastcgi_param SSL_CIPHER $ssl_cipher if_not_empty;
#fastcgi_param SSL_SESSION_ID $ssl_session_id if_not_empty;
#fastcgi_param SSL_CLIENT_VERIFY $ssl_client_verify if_not_empty;
LOGGEDIN_EXCEPTION
default_type text/html;
set $memcached_key data-$scheme://$host$request_uri;
set $memcached_request 1;
COOKIES_EXCEPTION
if ($request_method = POST ) {
set $memcached_request 0;
}
if ( $uri ~ "/wp-" ) {
set $memcached_request 0;
}
location ~ ^(?<script_name>.+?\.php)(?<path_info>.*)$ {
default_type text/html;
if ( $args ) {
set $memcached_request 0;
}
if ( $memcached_request = 1) {
RESPONSE_HEADER
memcached_pass memcached;
error_page 404 = @fallback;
}
LOGGEDIN_EXCEPTION
fastcgi_split_path_info ^(?<script_name>.+?\.php)(?<path_info>.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$script_name;
fastcgi_param PATH_TRANSLATED $document_root$path_info;
include params/fastcgi;
fastcgi_keep_conn on;
fastcgi_pass php-fpm;
}
COOKIES_EXCEPTION
location / {
try_files $uri $uri/ @rewrites;
}
if ( $memcached_request = 1) {
RESPONSE_HEADER
memcached_pass memcached-servers;
error_page 404 = @nocache;
break;
}
location @fallback {
# add_header X-Cache-Engine "WP-FFPC nginx via memcached - fallback - not cached";
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
fastcgi_split_path_info ^(?<script_name>.+?\.php)(?<path_info>.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$script_name;
fastcgi_param PATH_TRANSLATED $document_root$path_info;
include fastcgi_params;
fastcgi_keep_conn on;
fastcgi_pass php-fpm;
}
location @nocache {
add_header X-Cache-Engine "not cached";
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
location @rewrites {
rewrite ^ /index.php last;
}
location / {
try_files $uri $uri/ /index.php;
}
}
}

View file

@ -3,61 +3,70 @@
Plugin Name: WP-FFPC
Plugin URI: https://github.com/petermolnar/wp-ffpc
Description: WordPress in-memory full page cache plugin
Version: 1.7.9
Version: 1.11.2
Author: Peter Molnar <hello@petermolnar.eu>
Author URI: http://petermolnar.eu/
Author URI: http://petermolnar.net/
License: GPLv3
Text Domain: wp-ffpc
Domain Path: /languages/
*/
/* Copyright 2010-2014 Peter Molnar ( hello@petermolnar.eu )
/*Copyright 2010-2017 Peter Molnar ( hello@petermolnar.eu )
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 3, as
published by the Free Software Foundation.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License, version 3, as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA02110-1301USA
*/
defined('ABSPATH') or die("Walk away.");
include_once ( 'wp-ffpc-class.php' );
$wp_ffpc_defaults = array (
'hosts'=>'127.0.0.1:11211',
'memcached_binary' => false,
'authpass'=>'',
'authuser'=>'',
'expire'=>300,
'expire_home'=>300,
'expire_taxonomy'=>300,
'invalidation_method'=>0,
'prefix_meta' =>'meta-',
'prefix_data' =>'data-',
'charset' => 'utf-8',
'log' => true,
'cache_type' => 'memcached',
'cache_loggedin' => false,
'nocache_home' => false,
'nocache_feed' => false,
'nocache_archive' => false,
'nocache_single' => false,
'nocache_page' => false,
'nocache_cookies' => false,
'nocache_dyn' => true,
'nocache_url' => '^/wp-',
'response_header' => false,
'generate_time' => false,
'precache_schedule' => 'null',
'key' => '$scheme://$host$request_uri',
'comments_invalidate' => true,
'pingback_header' => false,
$wp_ffpc_defaults= array (
'hosts' => '127.0.0.1:11211',
'memcached_binary' => false,
'authpass' => '',
'authuser' => '',
'browsercache' => 0,
'browsercache_home' => 0,
'browsercache_taxonomy' => 0,
'expire' => 300,
'expire_home' => 300,
'expire_taxonomy' => 300,
'invalidation_method' => 0,
'prefix_meta' => 'meta-',
'prefix_data' => 'data-',
'charset' => 'utf-8',
'log' => true,
'cache_type' => 'memcached',
'cache_loggedin' => false,
'nocache_home' => false,
'nocache_feed' => false,
'nocache_archive' => false,
'nocache_single' => false,
'nocache_page' => false,
'nocache_cookies' => false,
'nocache_dyn' => true,
'nocache_woocommerce' => true,
'nocache_woocommerce_url' => '',
'nocache_url' => '^/wp-',
'nocache_comment' => '',
'response_header' => false,
'generate_time' => false,
'precache_schedule' => 'null',
'key' => '$scheme://$host$request_uri',
'comments_invalidate' => true,
'pingback_header' => false,
'hashkey' => false,
);
$wp_ffpc = new WP_FFPC ( 'wp-ffpc', '1.7.9', 'WP-FFPC', $wp_ffpc_defaults, 'PeterMolnar_WordPressPlugins_wp-ffpc_HU' , 'WP-FFPC' , 'FA3NT7XDVHPWU' );
?>
$wp_ffpc= new WP_FFPC ( 'wp-ffpc', '1.11.2', 'WP-FFPC', $wp_ffpc_defaults );