我在本地主机上有一个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)。
答案 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)
我要做三件事以确保不会缓存动态数据:
这些标头集在过去基本上已经过期,它设置了许多指令来避免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
某些代理和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" />
应该缓存静态资源(或等效资源),例如图像,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中。这几乎是出乎意料的,并且在当时造成了不良行为。
浏览器功能也会随着时间的推移而变化,并且当某些用户仍在使用旧的浏览器时,有些用户将无法理解某些指令。
因此,我建议保持安全,并尽可能添加尽可能多的对策。