使W3总缓存“清空所有缓存”函数清除清漆

时间:2012-12-13 作者:FLX

现在,当我执行“清空所有缓存”时,它不会向varnish发送清除请求。结果是清漆没有被刷新。选择“清空所有缓存”时,有没有办法让varnish清除它的缓存?有没有一种方法可以连接到W3 Total Cache“清空所有缓存”?

2 个回复
最合适的回答,由SO网友:Pontus Abrahamsson 整理而成

一个简单的解决方案是在单击“清空所有缓存”按钮时使用$_GET 像这样:

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配置语言(VCL)还具有url清除功能。可以通过purge\\u url(url\\u 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";
        }
    }
}
上面的脚本具有请求方法(如GET&;的正常代理/缓存行为);邮递但当用户通过“flush\\u all”方法连接时,页面将被清除。

SO网友:Joe Izzard

W3 Total Cache似乎已经知道这个问题,可能很快就会解决。假设您有SSH访问权限,请打开一个新客户端并运行:

varnishadm -T 127.0.0.1:6082 url.purge .
这将强制刷新缓存(请注意,我不使用Varnish,因此此代码未经测试)我在garron 地点

干杯,乔

结束

相关推荐

hooks & filters and variables

我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴

使W3总缓存“清空所有缓存”函数清除清漆 - 小码农CODE - 行之有效找到问题解决它

使W3总缓存“清空所有缓存”函数清除清漆

时间:2012-12-13 作者:FLX

现在,当我执行“清空所有缓存”时,它不会向varnish发送清除请求。结果是清漆没有被刷新。选择“清空所有缓存”时,有没有办法让varnish清除它的缓存?有没有一种方法可以连接到W3 Total Cache“清空所有缓存”?

2 个回复
最合适的回答,由SO网友:Pontus Abrahamsson 整理而成

一个简单的解决方案是在单击“清空所有缓存”按钮时使用$_GET 像这样:

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配置语言(VCL)还具有url清除功能。可以通过purge\\u url(url\\u 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";
        }
    }
}
上面的脚本具有请求方法(如GET&;的正常代理/缓存行为);邮递但当用户通过“flush\\u all”方法连接时,页面将被清除。

SO网友:Joe Izzard

W3 Total Cache似乎已经知道这个问题,可能很快就会解决。假设您有SSH访问权限,请打开一个新客户端并运行:

varnishadm -T 127.0.0.1:6082 url.purge .
这将强制刷新缓存(请注意,我不使用Varnish,因此此代码未经测试)我在garron 地点

干杯,乔

相关推荐

About Hooks and Filters

嗯,我很难理解动作和过滤器之间的区别。我确实在代码中使用动作,但我是一个新手,甚至连一点过滤器都不知道。我去过codex,以及NickTheGeek、BillErickson、GaryJones等的多个网站,但没有去过vein。如果你能用简单的话告诉我,并举例说明动作、过滤器和挂钩的基本内容和区别。非常感谢。