web-dev-qa-db-fra.com

Rendre W3 Total Cache "Vider tous les caches" fonction vernis de purge

À l'heure actuelle, lorsque j'exécute "Vider tous les caches", il n'envoie pas de requête PURGE au vernis. Le résultat est que le vernis n'est pas rafraîchi. Existe-t-il un moyen de purger le cache du vernis lorsque vous choisissez "Vider tous les caches"? Puis-je utiliser le cache total W3 "Vider tous les caches" de W3 Total Cache?

3
FLX

Une solution simple pourrait être de vérifier lorsque vous cliquez sur le bouton "Vider tout le cache" avec $_GET comme ceci:

function wpse_16722_purge_varnish() {
    // Is the button submitted, Get the value
    $purge = isset( $_GET['w3tc_note'] ) ? trim( $_GET['w3tc_note'] ) : '';

    // Security-check, user can edit settings
    // And the button "Empty all cache" is submitted
    if( current_user_can('manage_options') && $purge == 'flush_all' ) {

        // Maybe there is a better way to clear the cache 
        // in varnish, i found this on php.net
        // Change this to match your Varnish-setup

        $fp = fsockopen( "127.0.0.1", "80", $errno, $errstr, 2 );

        if ( ! $fp ) {
            echo = "$errstr ($errno)<br />\n";
        } else {
            $out = "PURGE /alain HTTP/1.0\r\n";
            $out .= "Host: giantdorks.org\r\n";
            $out .= "Connection: Close\r\n\r\n";

            fwrite( $fp, $out );

            while ( ! feof( $fp ) ) {
                echo fgets( $fp, 128 );
            }
            fclose( $fp );
        }    
    }
}
add_action('admin_head', 'wpse_16722_purge_varnish');

Varnish Configuration Language (VCL) possède également la fonction de purge d’URL. Il est accessible via la fonction purge_url (url_pattern).

acl purge_acl {
    "localhost";
    "some.hostname.ext";
    "154.120.2.33";
}
sub vcl_recv {
    if(req.request == "flush_all") {
        if(!client.ip ~ purge_acl) {
            error 405 "Not allowed";
        } else {
            purge_url(req.url);
            error 200 "Purged";
        }
    }
}

Le script ci-dessus a le comportement proxy/cache normal pour les méthodes de requête telles que GET & POST. Mais lorsqu'un utilisateur se connecte via la méthode "flush_all", la page est purgée.

4
Pontus Abrahamsson

Il semble que le problème soit connu de W3 Total Cache et qu’il puisse être corrigé prochainement. En supposant que vous ayez un accès SSH, ouvrez un nouveau client et exécutez:

varnishadm -T 127.0.0.1:6082 url.purge .

Cela forcera le cache à être actualisé (notez que je n'utilise pas Varnish, ce code n'a donc pas été testé.) Je l'ai trouvé sur le garron Site.

À votre santé,
Joe

1
Joe Izzard