Skip to content


Accélérer l'affichage de vos pages PHP avec Memcached sous Debian Squeeze partie II

Installation de Memcached, php5-memcached et php5-memcache

Nous installons en réalité deux paquets : memcached, php5-memcached et php5-memcache

# apt-get install memcached php5-memcached php5-memcache

Rien de particulier n'est à remarquer dans les fichiers de ces deux paquets. En effet aucune configuration particulière n'est demandée.

Ajouter les extensions Memcached Object Cache, W3 Total Cache

Vous pouvez les trouver sur : http://wordpress.org/extend/plugins

Le souci que je rencontre est lors l'activation celui-ci génère une erreur fatale :

PHP Fatal error:  Cannot redeclare class wp_object_cache in /var/www/blog/wp-content/plugins/memcached/object-cache.php on line 88, referer: http://monblog.system-linux.net/blog/wp-admin/plugins.php?error=true&plugin=memcached%2Fobject-cache.php&_error_nonce=5c33be0af7

Or il semble que l'extension qui ne contient qu'une page PHP, déclare une classe WP_Object_Cache qui semble être déjà déclarée dans le fichier wp-includes/cache.php.

Cette page cache.php est appelée par wp-includes/load.php qui pourtant fait le choix entre la page cache.php et object-cache.php ! Mais en y regardant de plus près il s'avère que load.php semble chercher object-cache.php dans wp-content. Ne le trouvant pas elle charge cache.php qui pour le coup rend in-activable la nouvelle extension.

/**
 * Starts the WordPress object cache.
 *
 * If an object-cache.php file exists in the wp-content directory,
 * it uses that drop-in as an external object cache.
 *
 * @access private
 * @since 3.0.0
 */
function wp_start_object_cache() {
        global $_wp_using_ext_object_cache;
 
        $first_init = false;
 if ( ! function_exists( 'wp_cache_init' ) ) { if ( file_exists( WP_CONTENT_DIR . '/object-cache.php' ) ) { require_once ( WP_CONTENT_DIR . '/object-cache.php' ); $_wp_using_ext_object_cache = true; } else { require_once ( ABSPATH . WPINC . '/cache.php' ); $_wp_using_ext_object_cache = false; }
                $first_init = true;
        } else if ( !$_wp_using_ext_object_cache && file_exists( WP_CONTENT_DIR . '/object-cache.php' ) ) {
                // Sometimes advanced-cache.php can load object-cache.php before it is loaded here.
                // This breaks the function_exists check above and can result in $_wp_using_ext_object_cache
                // being set incorrectly.  Double check if an external cache exists.
                $_wp_using_ext_object_cache = true;
 
        }
 
        // If cache supports reset, reset instead of init if already initialized.
        // Reset signals to the cache that global IDs have changed and it may need to update keys
        // and cleanup caches.
        if ( !$first_init && function_exists('wp_cache_reset') )
                wp_cache_reset();
        else
                wp_cache_init();
 
        if ( function_exists( 'wp_cache_add_global_groups' ) ) {
                wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'site-transient', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-po$
                wp_cache_add_non_persistent_groups( array( 'comment', 'counts', 'plugins' ) );
        }
}

 

La solution est d'installer cette extension sans l'activer puis de copier wp-content/plugins/object-cache.php dans wp-content. Ensuite à vous de voir si vous désinstallez celle-ci !?

cp wp-content/plugins/object-cache.php wp-content/

Si l'execution de memcached est verbeux alors vous aurez des log de cette forme :

30: going from conn_parse_cmd to conn_mwrite
30: going from conn_mwrite to conn_new_cmd
30: going from conn_new_cmd to conn_waiting
30: going from conn_waiting to conn_read
30: going from conn_read to conn_parse_cmd
<30 get wp_:post_tag:24
> FOUND KEY wp_:post_tag:24
>30 sending key wp_:post_tag:24
>30 END
30: going from conn_parse_cmd to conn_mwrite
30: going from conn_mwrite to conn_new_cmd
30: going from conn_new_cmd to conn_waiting
30: going from conn_waiting to conn_read
30: going from conn_read to conn_parse_cmd
<30 get wp_:post_tag:25
> FOUND KEY wp_:post_tag:25
>30 sending key wp_:post_tag:25
>30 END

Ce qui montre que votre blog WordPress est bien connecté à memcached... Cependant j'ai eu quelques soucis quant à l'affichage de certaines pages... Et quelques lenteurs... 🙁

Elles ne contenaient plus la partie "Articles récents", etc. Ce qui est assez gênant.

Après quelques recherche sur ce souci, il s'avère que seule cette extension ne suffit pas ! 🙁

J'ai donc installé en plus de Memcached Object Cache, W3 Total Cache

 

Activer W3 Total Cache

Avant d'activer ce cache il faut auparavant vérifier la présence du fichier ".htaccess" dans la racine de votre blog. Si vous activez des permaliens particuliers c'est dans ce fichier qu'est contenu cette configuration. Et lors de l'activation de W3 Total Cache, celui-ci l'a ré-écrit au lieu d'ajouter ses options ! :O

HTACCESS permaliens :

# BEGIN : Mode de ré-écriture pour les permaliens
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]
</IfModule>
# END : Mode de ré-écriture pour les permaliens

Voici la partie W3 Total Cache

# BEGIN W3TC Browser Cache
<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin *
</IfModule>
<IfModule mod_deflate.c>
    <IfModule mod_setenvif.c>
        BrowserMatch ^Mozilla/4 gzip-only-text/html
        BrowserMatch ^Mozilla/4\.0[678] no-gzip
        BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
        BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
    </IfModule>
    <IfModule mod_headers.c>
        Header append Vary User-Agent env=!dont-vary
    </IfModule>
    <IfModule mod_filter.c>
        AddOutputFilterByType DEFLATE text/css application/x-javascript text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon
    </IfModule>
</IfModule>
<FilesMatch "\.(css|js|CSS|JS)$">
    FileETag None
    <IfModule mod_headers.c>
         Header set X-Powered-By "W3 Total Cache/0.9.2.3"
    </IfModule>
</FilesMatch>
<FilesMatch "\.(html|htm|rtf|rtx|svg|svgz|txt|xsd|xsl|xml|HTML|HTM|RTF|RTX|SVG|SVGZ|TXT|XSD|XSL|XML)$">
    FileETag None
    <IfModule mod_headers.c>
         Header set X-Powered-By "W3 Total Cache/0.9.2.3"
    </IfModule>
</FilesMatch>
<FilesMatch "\.(asf|asx|wax|wmv|wmx|avi|bmp|class|divx|doc|docx|exe|gif|gz|gzip|ico|jpg|jpeg|jpe|mdb|mid|midi|mov|qt|mp3|m4a|mp4|m4v|mpeg|mpg|mpe|mpp|odb|odc|odf|odg|odp|ods|odt|ogg|pdf|png|pot|pps|ppt|pptx|ra|ram|swf|tar|tif|tiff|wav|wma|wri|xla|xls|xlsx|xlt|xlw|zip|ASF|ASX|WAX|WMV|WMX|AVI|BMP|CLASS|DIVX|DOC|DOCX|EXE|GIF|GZ|GZIP|ICO|JPG|JPEG|JPE|MDB|MID|MIDI|MOV|QT|MP3|M4A|MP4|M4V|MPEG|MPG|MPE|MPP|ODB|ODC|ODF|ODG|ODP|ODS|ODT|OGG|PDF|PNG|POT|PPS|PPT|PPTX|RA|RAM|SWF|TAR|TIF|TIFF|WAV|WMA|WRI|XLA|XLS|XLSX|XLT|XLW|ZIP)$">
    FileETag None
    <IfModule mod_headers.c>
         Header set X-Powered-By "W3 Total Cache/0.9.2.3"
    </IfModule>
</FilesMatch>
# END W3TC Browser Cache

Une fois ces deux parties mises dans votre fichier ".htaccess" sauvegardez le !

Configuration W3 Total Cache

Rendez-vous sur la page de configuration de cette extension et choisissez "memcached" chaque fois que vous avez un sélecteur vous le proposant ! Simple !

 

Vous pouvez désormais voir les log de memcached :

30: going from conn_parse_cmd to conn_mwrite
30: going from conn_mwrite to conn_new_cmd
30: going from conn_new_cmd to conn_waiting
30: going from conn_waiting to conn_read
30: going from conn_read to conn_parse_cmd
&lt;30 get wp_:post_tag:25
&gt; FOUND KEY wp_:post_tag:25
&gt;30 sending key wp_:post_tag:25
&gt;30 END
 
Ce qui montre que votre blog WordPress est bien connecté à  memcached... Cependant j'ai eu quelques soucis quant à  l'affichage de certaines pages... Et quelques lenteurs... 🙁
 
Elles ne contenaient plus la partie "Articles récents", etc. Ce qui est assez gênant, je suis en train d'investiguer ! 🙂
 
Pour ma part j'ai donc désactivé cette fonctionnalité, afin de ne pas pénaliser mes visiteurs. 😉";s:10:"post_title";s:75:"Accélérer l'affichage de vos pages PHP avec Memcached sous Debian Squeeze""post_category";s:1:"0";s:12:"post_excerpt";s:0:"";s:11:"post_status";s:7:"publish";s:14:"comment_status";s:4:"open";s:11:"ping_status";s:4:"open";s:13:"post_password";s:0:"";s:9:"post_name";
s:72:"accelerer-laffichage-de-vos-pages-php-avec-memcached-sous-debian-squeeze";s:7:"to_ping";s:0:"";s:6:"pinged";s:0:"";s:13:"post_modified";s:19:"2011-08-22 08:36:21";s:17:"post_modified_gmt";s:1
9:"2011-08-22 06:36:21";s:21:"post_content_filtered";s:0:"";s:11:"post_parent";i:0;s:4:"guid";s:44:"http://monblog.system-linux.net/blog/?p=2418";s:10:"menu_order";i:0;s:9:"post_type";s:4:"post";s:
14:"post_mime_type";s:0:"";s:13:"comment_count";s:1:"0";s:6:"filter";s:3:"raw";}
estion de memcached à votre blog WordPress">15</a></td><td>16</td><td>17</td><td><a href="http://monblog.system-linux.net/blog/2011/08/18/" title="Accélérer l&#8217;affichage de vos pages PHP avec emcached et eAccelerator sous Debian Squeeze">18</a></td><td>19</td><td>20</td><td>21</td>
        </tr>
        <tr>
                <td id="today">22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td>
        </tr>
        <tr>
                <td>29</td><td>30</td><td>31</td>
                <td colspan="4">&nbsp;</td>
        </tr>
        </tbody>
        </table>";}
^H<C0>
>31 END

Et depuis plus de souci avec les pages ou des lenteurs de celles-ci !

- Fin -

Print Friendly, PDF & Email

Posted in Debian, Important, Linux, Technique, Toutes. Tagged with , , , , .

0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

Some HTML is OK

(required)

(required, but never shared)

or, reply to this post via trackback.

Time limit is exhausted. Please reload CAPTCHA.


/* */
Creative Commons License
Cette création par Laurent Besson est mise à disposition selon les termes de la licence Creative Commons Paternité-Partage des Conditions Initiales à l'Identique 2.0 France.