如何使用php实现浏览器缓存?

4
我是一位有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我正在检查http://pagespeed.googlelabs.com谷歌页面速度工具,我的网站得分为88。它建议我为网站使用浏览器缓存。我在stackoverflow上搜索了相关信息,但所有的都涉及到htaccess文件,而我的主机不允许我使用htaccess文件,那么如何在PHP中实现呢?

htaccess代码如下:

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=290304000, public"
</FilesMatch>

9
选择一个更好的网络托管服务。 - SLaks
1
没有 .htaccess 文件?真的吗?那个主机叫什么名字? - deceze
1
谢谢,我会比以前更加避免使用Yahoo… :) - deceze
有关 IIS,请参见 https://dev59.com/rkvSa4cB1Zd3GeqPbhm2 - Elzo Valugi
3个回答

6
如果您的主机商不支持 .htaccess 或使用其他方法配置Web服务器,则需要将整个HTTP堆栈实现到自己的应用程序中以提供自己的配置。这意味着在文件本身旁边发送适当的头文件。您需要将这些文件映射到命令,这通常是使用 .htaccess + Mod_Rewrite 完成的。简而言之,您需要通过设置相关标头的PHP脚本来传递所有内容。但是,这种方法的缺点是PHP需要处理所有内容,这与Web服务器通过静态文件传递相比速度会有所下降。因此,我无法真正建议您这样做。最好的方法是获取一个合适的Web主机(或升级您的套餐),以获得您正在寻找的功能,而不是重新发明轮子。因此,获取一些 .htaccess 支持可能是最简单的方法。
作为另一种选择,您可以考虑将静态文件放在提供所需功能(例如CDN)的另一个主机上,并将核心应用程序留在当前网络主机上,但我认为这只会使事情变得更加复杂,而不是帮助您轻松解决问题。

3

经过一天的研究,我得到了使用.htaccess文件实现浏览器缓存的解决方案。

请记住服务器上要开启mod_expires和mod_headers模块。

只需将以下内容放入.htaccess文件中即可:

<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresDefault "access plus 1 seconds"
  ExpiresByType image/x-icon "access plus 2592000 seconds"
  ExpiresByType image/jpeg "access plus 2592000 seconds"
  ExpiresByType image/png "access plus 2592000 seconds"
  ExpiresByType image/gif "access plus 2592000 seconds"
  ExpiresByType application/x-shockwave-flash "access plus 2592000 seconds"
  ExpiresByType text/css "access plus 604800 seconds"
  ExpiresByType text/javascript "access plus 216000 seconds"
  ExpiresByType application/x-javascript "access plus 216000 seconds"
  ExpiresByType text/html "access plus 600 seconds"
  ExpiresByType application/xhtml+xml "access plus 600 seconds"
</IfModule>
<IfModule mod_headers.c>
<FilesMatch "\\.(ico|jpe?g|png|gif|swf)$">
Header set Cache-Control "max-age=2692000, public"
</FilesMatch>
<FilesMatch "\\.(css)$">
Header set Cache-Control "max-age=2692000, public"
</FilesMatch>
<FilesMatch "\\.(js)$">
Header set Cache-Control "max-age=216000, private"
</FilesMatch>
<FilesMatch "\\.(x?html?|php)$">
Header set Cache-Control "max-age=600, private, must-revalidate"
</FilesMatch>
Header unset ETag
Header unset Last-Modified
</IfModule>

1

如果没有htaccess或ACP的权限,你将无法执行任何操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接