PHP Caching使我的网站停止显示实际文件,而是显示旧文件。我已经尝试了一切,但没有任何效果

时间:2018-11-25 13:40:01

标签: php html mysql apache xampp

我在本地主机上有一个php网站,它始终可以正常运行,但是现在它只显示了旧的CSS文件和旧的js文件。当我编辑文件并刷新页面时,没有任何变化。

尤其是CSS布局文件不想更新

我使用: XAMPP和 APACHE

我已经阅读了很多关于stackoverflow的文章,但是对于我尝试添加的内容无效:

Iterator

但这给了一个错误:

  

此页面包含以下错误:第44行第8列的错误:   开头和结尾的标签不匹配:将第0行和第一个标题链接如下   呈现页面直到第一个错误。

然后将页面作为文档处理,仅显示纯文本。

我尝试使用.htaccess文件,但这些文件没有任何操作

我真的不知道该如何处理,我无法继续在该网站上浏览,因为它只是不想更新,而且停留在旧页面上。

任何人都可以帮我解决这个问题,因为我有点绝望了。

编辑:

所以我解决了这个错误,但是它仍然没有更新

我将PHP更改为:

<?php 

header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Content-Type: application/xml; charset=utf-8");

?>

因为它另外将我的页面显示为XML,但这仍然不会更新布局。

如何让我的页面自动重新加载文件,所以没有(CTRL + F5)。

2 个答案:

答案 0 :(得分:0)

仅当html页面的文档类型为XHTML时,才应发生此错误。您可以通过查看文档的第一行来检查这一点,它声明了XTHML doctype:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

这意味着所有 html标签必须正确关闭,例如

<head>
    <title>my webpage</title>
    <link rel="stylesheet" type="text/css" href="mystyles.css"></link>
</head>

请注意我在第三行中添加的</link>。解决此问题的最简单方法是将doctype更改为

<!DOCTYPE html>

这意味着您的文档不必是well-formed

替代方法是关闭所有html标签。

我建议您尝试一下,如果高速缓存问题仍然存在,请再次提出要求。


也不要缓存样式表文件

最简单的方法是,只要更改样式,就只需向样式表文档中添加一个新参数(例如,带有版本号的?ver):

<link rel="stylesheet" type="text/css" href="mystyles.css?ver01"></link>

应该这样做,您不必更改样式表的文件名。

另一种更复杂的方法是安装mod_expires并在您的apache2配置中定义它:

ExpiresActive On
ExpiresDefault “access plus 10 days”
ExpiresByType text/css “access plus 1 second”

我希望这会有所帮助!如果可以的话,请接受这个答案。

答案 1 :(得分:-1)

我要做三件事以确保不会缓存动态数据:

  1. 设置适当的响应头;
  2. 包括HTML元标记;
  3. 为可能更改的资源URL添加时间戳。

1。设置适当的响应头

这些标头集在过去基本上已经过期,它设置了许多指令来避免PHP输出和最终客户端之间的服务修改或缓存源。

Expires: Sat, 26 Jul 1997 05:00:00 GMT
Cache-Control: nocache, must-revalidate, no-store, max-age=0, private, max-stale=0, post-check=0, pre-check=0, no-transform
Pragma: no-cache

2。包括HTML元标记

某些代理和Web客户端将解析HTML(应避免使用上面的“ no-transform”指令)。因此,在HTML输出中添加指令可以进一步降低缓存的风险。

此html摘录中有两个“过期”规范-据我了解,某些Web客户端不会解析日期。

<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Sat, 26 Jul 1997 05:00:00 GMT" />

3。向可能更改的资源URL添加时间戳。

应该缓存静态资源(或等效资源),例如图像,css文件以及xml文件,文本文件,字体等,以提高性能,但是在更新它们时仍要避免缓存。

通过向URL添加时间戳,URL将取决于资源时间戳本身,并且将阻止中间服务器提供缓存版本。

您可以使用诸如“ v1”,“ v2”等的静态“标记”替换时间戳。但是,我更喜欢计算时间戳,因为我不再需要考虑更新时间戳。实际上,几乎我所有的资源都会自动加上时间戳。

这是一个PHP示例:

// This is a simple example, it must be adapted to your environment.
// * $initialUrl is a URL like "//mystyle.css" without any get parameter.
// * $resourceUrl is the (relative) server path to that resource
//                 which could be "/var/www/mysit/mystyle.css"
// * filemtime gets the timestamp of the resource.
// * baseconvert gets a shorter representation of that timestamp.
// * The timestamp is appended to the URL by simple concatenation here.
// * $url can then be used to generate the HTML (echo ".... $url ...";).
// * This can (should) be wrapped in a function.  Personally I have integrated
//   it in the MVC Framework I use in an output filter and in a utility
//   class method.
$url=$initialUrl.'?ts='.base_convert(filemtime($resourcePath),10, 36);

注意

某些指令可能是多余的,但是与让特定用户遇到问题相比,冗余是更好的选择。以上是实际现场经验的结果。例如,在远程调试用户的环境后添加了“ no-transform”,在该环境中,其移动运营商的代理将javascript和CSS资源直接插入到HTML中。这几乎是出乎意料的,并且在当时造成了不良行为。

浏览器功能也会随着时间的推移而变化,并且当某些用户仍在使用旧的浏览器时,有些用户将无法理解某些指令。

因此,我建议保持安全,并尽可能添加尽可能多的对策。