【问题标题】:I need .htaccess to cache php pages, and expire them at the beginning of every hour (xx:00:00)我需要 .htaccess 来缓存 php 页面,并在每小时开始时将它们过期(xx:00:00)
【发布时间】:2012-01-22 01:38:31
【问题描述】:

我想缓存多个在每小时(xx:00:01)开始时显示不同数据的php页面?

到目前为止,我已经找到了一种从访问(或修改文件)时缓存页面 +1 小时的方法,但是如果用户在 xx:59:00 访问该页面,那么在 xx+1: 00:01,他会看到缓存的页面数据,而不是新显示的数据。

最好使用 .htaccess,我需要写什么来获得常规的“最小时”缓存到期?

最终代码(非 htaccess):

$nexthour = mktime(date("H")+1, 00, 20) - mktime();
header("Cache-Control: public, must-revalidate, max-age=".$nexthour.", s-maxage=".$nexthour);

在每一页的顶部。

【问题讨论】:

标签: php apache .htaccess caching mod-expires


【解决方案1】:

可以使用 htaccess 完成,但有点痛苦。

RewriteCond %{TIME_WDAY} ^0$
RewriteCond yourfile.php - [E=daystring:SUN]
#etc (7x)

RewriteCond %{TIME_MON} ^0$
RewriteCond yourfile.php - [E=monthstring:JAN]
#etc (12x)

Header set "Expires" "%{daystring}, %{TIME_DAY} %{monthstring} %{TIME_YEAR} %{TIME_HOUR}:59:59 GMT "

最好只在 PHP 本身中执行此操作(在 session_start() 之后)。

<?php
$nexthour = mktime (date("H"), 59, 59);
header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', $nexthour)); 
?>

【讨论】:

  • 这看起来像票 :) 使用 PHP 代码,我是否还需要在 .htaccess 中指定任何内容?另外,会话是从哪里来的?
  • 你只需要 php.ini 文件。不需要任何htaccess。如果你没有使用会话(例如$_SESSION['foo']),你可以忘记我说过的,因为它不适用。
  • 好吧 :) 刚刚对其进行了测试,但最终使用了 Cache-control 而不是 Expires,因为它不受时区限制。
  • 任何对你有用的东西。 (注意使用gmdate,而不是date
【解决方案2】:

一个选项是设置一个 cron 作业按小时运行。您可以让它更新它所关心的所有静态 html 文件,然后让 Apache 为这些文件提供服务。

(这不是基于 .htaccess 的解决方案。)

【讨论】:

  • 我考虑过这一点,以及在 php 文件顶部生成静态文件,如果它们在那一小时内不存在,但我认为这种方法比客户端更“脏”缓存。那,我很想看看 .htaccess 是否有这样的能力:P
  • 实际上,考虑一下,您还可以有一个 cron 的 php 脚本来编辑 .htaccess,并更改所有 php 文件的绝对到期日期:P 虽然仍在寻找一个单独的 htaccess 解决方案.. .
猜你喜欢
  • 1970-01-01
  • 2019-07-29
  • 2017-09-21
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多