无论我做什么,我都无法缓存我的动态php文件

时间:2012-09-11 01:03:47

标签: php apache caching

好的,我的主页加载速度相对较慢......嗯,不是真的,需要大约一秒半。它是我网站上最慢的页面。

现在的情况是,对于那些已登录的用户,主页是当天的100%静态内容。

所以,我想这样做,如果你没有登录,内容会被缓存当天(如果他们已登录,那么我不希望它被缓存)。

在过去的几个小时里,我一直在撕扯我的眼球,诅咒每一个名叫上帝并用斧头跑来跑去,试图让这个起作用。我有网站的其他部分目前使用缓存,如CSS / JS / Images,所有这些,我真的很容易,并没有我现在的这个问题。

我把它直言不讳......它不会 * 缓存...... 我使用HTTPS,但我不明白为什么它不会让我缓存主html文件,如果它让我缓存JS / CSS /图像。

无论如何,所以我想你想知道我尝试了什么...

设置缓存控制:

date_default_timezone_set('Europe/Jersey');
$date = date("Y-m-d");
$date = date("D, d M Y", strtotime(date("d M Y", strtotime($date)) . " +1 day"));
$udate = date("D, d M Y", strtotime(date("d M Y", strtotime($date)) . " -1 day"));

header('Content-Type: text/html');
header("Cache-Control: max-age=86400, public, must-revalidate");
header("Last-Modified: " . $udate . " 00:00:01 GMT");
header('Expires: ' . $date . ' 00:00:01 GMT');

已发送标题:

Cache-Control:max-age=604800, public, must-revalidate
Connection:Keep-Alive
Content-Encoding:gzip
Content-Language:en-GB
Content-Type:text/html; charset=utf-8
Date:Tue, 11 Sep 2012 00:55:11 GMT
Expires:Wed, 12 Sep 2012 00:00:01 GMT
Keep-Alive:timeout=2, max=75
Last-Modified:Tue, 11 Sep 2012 00:00:01 GMT
Server:Apache
Transfer-Encoding:chunked
Vary:Accept-Encoding

它缓存了吗?不,chrome坚持每个加载这个页面的方式,它会直接转到源代码,即使它已经存在(从缓存中加载images / js / css等)。

然后我尝试了ETags:

function caching_headers ($file, $timestamp) {
    $gmt_mtime = gmdate('r', $timestamp);
    header('ETag: "'.md5($timestamp.$file).'"');
    header('Last-Modified: '.$gmt_mtime);
    header('Cache-Control: public');

    if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
        if ($_SERVER['HTTP_IF_MODIFIED_SINCE'] == $gmt_mtime || str_replace('"', '', stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])) == md5($timestamp.$file)) {
            header('HTTP/1.1 304 Not Modified');
            exit();
        }
    }
}

date_default_timezone_set('Europe/Jersey');

$date = date("D, d M Y") . " 0:0:0 GMT";

caching_headers('homepage', strtotime($date));

echo $_SERVER['HTTP_IF_MODIFIED_SINCE'];

它缓存了吗?不,它总是告诉我HTTP_IF_MODI ...没有设置

在互联网上已经尝试了很多其他的代码片段,都失败了。

我缺少什么,必须有一种方法来缓存html文件,我已经看到很多网站都这么做了。

我会很快解释它。

我的主页,当用户未登录时,其静态内容每天更改一次。此页面在带宽大小方面自然拥有最多内容,然后是我网站上的任何其他页面。

如果用户未登录,我希望通过缓存内容来加速此页面,并且缓存仅在第二天早上持续到0:0:0。 我需要它在PHP中,而不是在htaccess中,所以我可以检查用户是否登录等。

我相信我需要使用ETAG,但无论出于什么原因我都无法让它们发挥作用。根据我的理解,我使用名为minify的脚本,使用ETAG很好,所以它不是我的服务器禁用它们。

说实话,我不知道我在做什么ETAG,但是帮助非常有限(每次有人请求帮助时,唯一的答复是有人告诉他禁用它。)。

[编辑] 根据php文档尝试了一个基本的缓存:

header("Pragma: public");
header("Cache-Control: max-age=604800");
header('Expires: ' . $date . ' 00:00:01 GMT');

没有骰子......

0 个答案:

没有答案