Apache或PHP将HTML输出保留在某种缓存中几分钟?



我最近在我的Windows 10机器上放弃了XAMPP,并手动重新安装了Apache(2.4(,PHP 7和MySQL(我按照这里给出的说明进行操作,以便能够在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文件。

问题似乎是由OPCache模块引起的,我必须启用该模块才能在另一个(drupal 8(项目上工作。

php.ini中,以下行:

; How often (in seconds) to check file timestamps for changes to the shared
; memory storage allocation. ("1" means validate once per second, but only
; once per request. "0" means always validate)
opcache.revalidate_freq=60

将 60 更改为 1(并重新启动 Apache(基本上解决了这个问题。

最新更新