【发布时间】:2017-07-19 19:47:19
【问题描述】:
我最近在我的 Windows 10 机器上放弃了 XAMPP,并手动重新安装了 Apache (2.4)、PHP 7 和 MySQL(我按照说明 given here 以便能够在 PHP 版本之间轻松切换)。
一切正常,除了现在我在 PHP 文件中进行更改并在浏览器中点击刷新时,更改通常不会立即出现在浏览器中。无论我多么用力地按 F5(或 Ctrl+F5),我仍然会得到未修改的源代码,而且我必须等待几分钟才能最终在浏览器中看到这些更改。
不用说,开发的时候挺烦的。当我使用 XAMPP 时,它并没有发生。
所以似乎某处有某种缓存,但我找不到它在哪里。我不知道是 Apache 还是 PHP,虽然我怀疑它可能是 PHP,因为 CSS 或 JS 文件不受此问题的影响(据我所知)。
知道导致这种行为的原因以及如何禁用它吗?
编辑:我做了更多测试。
我创建了最简单的 PHP 文件。只是:
<?php
echo 'test1';
我可以确认即使在这种简单的情况下也会出现问题(将“test1”更改为“test2”:浏览器仍然显示“test1”一段时间)。
在另一个浏览器中打开相同的页面仍然显示过时的代码(test1 而不是 test2)。
清除浏览器缓存没有帮助。
所以问题似乎没有发生在客户端。
然而,如果我使用 HTML 文件而不是 PHP 文件进行相同的测试,那么问题不会发生。对该文件所做的任何更改都可以立即在浏览器中看到(当然我仍然通过 Apache 访问这个文件,所以 http://localhost/some-path/test.html)
所以问题似乎只影响 PHP 文件。
【问题讨论】:
-
首先要始终检查您的浏览器是否缓存了此类内容。所以清空你的浏览器缓存并重试。您还可以打开浏览器开发控制台并在其中禁用缓存。
-
有服务器端缓存策略,但这些策略在http服务器或php内部都没有实现。你必须采取特殊的步骤来安装这样的层,你会知道的。
-
不是浏览器。我尝试了 Ctrl+F5 并清空了它的缓存。在另一个浏览器中打开同一页面也会显示过时的页面。就像我说的,当我使用 XAMPP 时,这种行为并没有发生,所以这似乎是服务器端发生的事情。
-
那么我建议您开始检查服务器内部实际发生的情况。检查http服务器日志文件:请求真的进来了吗?响应带有哪些标题,您可以在浏览器控制台中轻松查看这些标题?您实际上将那些您更改的脚本保存在哪里,是本地驱动器还是“虚拟”的东西?
-
检查访问日志:似乎一切正常,浏览器中的每次刷新都会生成一个
"GET /my-path/test.php HTTP/1.1" 200 5形式的新条目。脚本存储在我的硬盘驱动器 (c:\htdocs) 上,没有任何虚拟内容。我应该在响应标头中寻找什么?