【问题标题】:PHP cache control doesn't seem to workPHP缓存控制似乎不起作用
【发布时间】:2011-09-03 22:45:14
【问题描述】:

请看我的网站:vynora

还没有完成。我在 HTML 页面的顶部放置了一个 PHP 标头:

<?php if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) ob_start("ob_gzhandler"); else ob_start(); ?>
<?php
  header("Cache-Control: max-age=6000");
?>

当我去谷歌的pagespeed时它告诉我应该优化我的浏览器缓存,请看一下:Google pagespeed

但我已经使用 PHP。那么这怎么可能呢?

【问题讨论】:

    标签: php caching optimization http-headers


    【解决方案1】:

    问题不在此页面中,也不在 PHP 脚本中。查看 Google 的建议:

    以下可缓存资源有 保鲜期短。指定一个 到期至少一周 以下资源的未来:

    这意味着,您应该缓存您的静态文件。
    如我所见,您使用的是 Apache。在这种情况下你可以使用mod_expires

    例如,您可以在.htaccess 文件中添加以下行:

    ExpiresActive On
    ExpiresDefault "access plus 1 seconds"
    ExpiresByType text/html "access plus 1 seconds"
    ExpiresByType image/x-icon "access plus 2592000 seconds"
    ExpiresByType image/gif "access plus 2592000 seconds"
    ExpiresByType image/jpeg "access plus 2592000 seconds"
    ExpiresByType image/png "access plus 2592000 seconds"
    ExpiresByType text/css "access plus 604800 seconds"
    ExpiresByType text/javascript "access plus 86400 seconds"
    ExpiresByType application/x-javascript "access plus 86400 seconds"
    

    【讨论】:

    • 您好,我一直在寻找我的服务器上的.htaccess,但我找不到它....会不会是我不小心删除了它??这可能吗?我怎么做一个新的。我用记事本尝试了它并将其保存为 .htaccess 当我把它放在我的 index.php 旁边时,网页不起作用(错误)当我把它放在根目录中时(在公共文件邮件等旁边)它没有做任何事情。
    • @yomoore,这个文件应该在 index.php 文件所在的同一文件夹中,使用Notepad++ 或一些IDE(netbeans,PhpStorm),不要使用记事本(他添加了看不见的愚蠢符号在文件的开头)。
    • 现在可以使用了:) 我下载了 notepad++ 并复制了您的文字。而且我还删除了 php...非常感谢,您拯救了我的一天。
    【解决方案2】:

    要将页面缓存到用户浏览器中,请添加这些标题:

    header("Cache-Control: private, max-age=6000, pre-check=6000");
    header("Pragma: private");
    header("Expires: " . gmdate("D, d M Y H:i:s"). " GMT");
    

    gZip:

    http://www.whatsmyip.org/http_compression/?url=aHR0cDovL3d3dy52eW5vcmEuY29tLw==

    说它被压缩了

    http://redbot.org/?uri=http%3A%2F%2Fwww.vynora.com%2F

    说它被压缩了

    【讨论】:

    • 这与我已有的有什么不同?在我看来它是一样的。
    【解决方案3】:

    这可能不起作用,因为 header() 之前可能有空格。 试试这样:

    <?php 
        if (substr_count($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip')) {
            ob_start("ob_gzhandler"); 
        } else {
            ob_start();
        }
        header("Cache-Control: max-age=6000");
    ?>
    

    你也应该设置过期的标头,因为旧的浏览器不理解“max-age”。

    顺便说一句:您的服务器当前正在发送“max-age: 0”。

    【讨论】:

    • ''您的服务器当前正在发送 "max-age: 0"'' 是什么意思,您是如何检查的?
    • 获取 Firefox 的 LiveHttpHeaders 插件。更新:啊,现在是 6000。:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多