使用片段缓存从缓存中排除某些块-不起作用

时间:2013-05-10 作者:Krunal

我有一个单表单,我将它从函数文件插入到页脚。我需要向每个访问者显示一个随机表单,因此开发了一个功能来支持这一点。然而,启用缓存后,随机性不起作用。

我正在使用W3 Total Cache插件进行缓存。

所以在这里,我需要从缓存中排除某些代码部分。

我试图将该函数放在片段缓存中,这应该会起到作用,但事实并非如此。

我们需要从给定数组中传递一个随机整数,并在此基础上在页脚中加载随机形式。

以下是供您查看的代码片段:

<!--MFUNC {E7C5F12EBCDA5F83A41BF33D778ED} -->
   <?php
        //echo rand();
        $surveyforms=array("10","11");
        $ra=$surveyforms[array_rand($surveyforms)];
        echo($ra);
    ?>
<!--/mfunc {E7C5F12EBCDA5F83A41BF33D778ED} -->
JustThis应该在每次刷新页面时从给定的数组集合中打印一个随机数,但这是由于缓存了结果。如果我们禁用缓存,那么它可以正常工作,但是正如您所知,缓存对性能非常重要,所以我们不能禁用它。

同样的代码也移到了页脚。php,但在那里不起作用。

知道如何在函数文件上使用片段缓存吗?我同意任何其他可行的想法。

期待您的回复。

谢谢

1 个回复
SO网友:birgire

来源:

此处(source) 是mfunc W3TC插件0.9.2.9版本的一部分,其中正则表达式为:

$buffer = preg_replace_callback(\'~<!--\\s*mfunc\\s*\' . W3TC_DYNAMIC_SECURITY . \'(.*)-->(.*)<!--\\s*/mfunc\\s*\' . W3TC_DYNAMIC_SECURITY . \'\\s*-->~Uis\', array(
                &$this,
                \'_parse_dynamic_mfunc\'
            ), $buffer);
由此看来,设置应该是

<!-- mfunc W3TC_DYNAMIC_SECURITY code1-->
code2
<!-- /mfunc W3TC_DYNAMIC_SECURITY -->
Themfunc 回调是

function _parse_dynamic_mfunc($matches) {
    $code1 = trim($matches[1]);
    $code2 = trim($matches[2]);
    $code = ($code1 ? $code1 : $code2);

    if ($code) {
        $code = trim($code, \';\') . \';\';

        ob_start();
        $result = eval($code);
        $output = ob_get_contents();
        ob_end_clean();

        // ... cut ...
所以我们可以看到它使用eval()code2 零件如果code1 部件未设置。检查PHP手册中的此函数:

http://php.net/manual/en/function.eval.php

上面写着:

代码不能包装在打开和关闭PHP标记中

示例:

因此,我认为这是一个有效的示例

define(\'W3TC_DYNAMIC_SECURITY\', \'E7C5F12EBCDA5F83A41BF33D778ED\' ); 
看起来像这样(未测试):

这个code1 案例:

<!-- mfunc E7C5F12EBCDA5F83A41BF33D778ED         
    echo "From code1: Here is a random number " . rand(0,1000);
-->
<!--/mfunc E7C5F12EBCDA5F83A41BF33D778ED -->
或者code2 案例:

<!-- mfunc E7C5F12EBCDA5F83A41BF33D778ED -->
    echo "From code2: Here is a random number " . rand(0,1000);
<!--/mfunc E7C5F12EBCDA5F83A41BF33D778ED -->

结束
使用片段缓存从缓存中排除某些块-不起作用 - 小码农CODE - 行之有效找到问题解决它

使用片段缓存从缓存中排除某些块-不起作用

时间:2013-05-10 作者:Krunal

我有一个单表单,我将它从函数文件插入到页脚。我需要向每个访问者显示一个随机表单,因此开发了一个功能来支持这一点。然而,启用缓存后,随机性不起作用。

我正在使用W3 Total Cache插件进行缓存。

所以在这里,我需要从缓存中排除某些代码部分。

我试图将该函数放在片段缓存中,这应该会起到作用,但事实并非如此。

我们需要从给定数组中传递一个随机整数,并在此基础上在页脚中加载随机形式。

以下是供您查看的代码片段:

<!--MFUNC {E7C5F12EBCDA5F83A41BF33D778ED} -->
   <?php
        //echo rand();
        $surveyforms=array("10","11");
        $ra=$surveyforms[array_rand($surveyforms)];
        echo($ra);
    ?>
<!--/mfunc {E7C5F12EBCDA5F83A41BF33D778ED} -->
JustThis应该在每次刷新页面时从给定的数组集合中打印一个随机数,但这是由于缓存了结果。如果我们禁用缓存,那么它可以正常工作,但是正如您所知,缓存对性能非常重要,所以我们不能禁用它。

同样的代码也移到了页脚。php,但在那里不起作用。

知道如何在函数文件上使用片段缓存吗?我同意任何其他可行的想法。

期待您的回复。

谢谢

1 个回复
SO网友:birgire

来源:

此处(source) 是mfunc W3TC插件0.9.2.9版本的一部分,其中正则表达式为:

$buffer = preg_replace_callback(\'~<!--\\s*mfunc\\s*\' . W3TC_DYNAMIC_SECURITY . \'(.*)-->(.*)<!--\\s*/mfunc\\s*\' . W3TC_DYNAMIC_SECURITY . \'\\s*-->~Uis\', array(
                &$this,
                \'_parse_dynamic_mfunc\'
            ), $buffer);
由此看来,设置应该是

<!-- mfunc W3TC_DYNAMIC_SECURITY code1-->
code2
<!-- /mfunc W3TC_DYNAMIC_SECURITY -->
Themfunc 回调是

function _parse_dynamic_mfunc($matches) {
    $code1 = trim($matches[1]);
    $code2 = trim($matches[2]);
    $code = ($code1 ? $code1 : $code2);

    if ($code) {
        $code = trim($code, \';\') . \';\';

        ob_start();
        $result = eval($code);
        $output = ob_get_contents();
        ob_end_clean();

        // ... cut ...
所以我们可以看到它使用eval()code2 零件如果code1 部件未设置。检查PHP手册中的此函数:

http://php.net/manual/en/function.eval.php

上面写着:

代码不能包装在打开和关闭PHP标记中

示例:

因此,我认为这是一个有效的示例

define(\'W3TC_DYNAMIC_SECURITY\', \'E7C5F12EBCDA5F83A41BF33D778ED\' ); 
看起来像这样(未测试):

这个code1 案例:

<!-- mfunc E7C5F12EBCDA5F83A41BF33D778ED         
    echo "From code1: Here is a random number " . rand(0,1000);
-->
<!--/mfunc E7C5F12EBCDA5F83A41BF33D778ED -->
或者code2 案例:

<!-- mfunc E7C5F12EBCDA5F83A41BF33D778ED -->
    echo "From code2: Here is a random number " . rand(0,1000);
<!--/mfunc E7C5F12EBCDA5F83A41BF33D778ED -->

相关推荐

Nginx+WordPress+HHVM:为什么Batcache不能工作?瓦尼什会提供更多帮助吗?

我听说了很多关于HHVM, 所以我用Nginx(带Pagespeed模块)和HHVM设置了WordPress博客的副本(在另一个域上)。现在,好处是显而易见的:在相同的配置上,加载时间要快两到三倍。我正在努力加快速度,我还安装了Memcached and Batcache. 我已经安装了memcached 包,已复制对象缓存。php(Pastebin) 在WordPress博客的根文件夹上,然后我安装了Batcache插件并复制了高级缓存。php(Pastebin) 将文件保存到wp content文件夹