在 macOS Ventura 下,macports 安装的 apache2 + php82-fpm 似乎在安装 php82-opcache 之前就将 php 文件保存在缓存中。
我不知道这是来自 apache2 还是 php82-fpm,并且我尝试像这样在脚本的标头中设置缓存控制,但没有成功:
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
我的生产服务器是在Linux下,根本没有出现这种问题。
当我清空浏览器的缓存时,脚本可以正确执行,而相反的情况下则不能。
编辑:当我意识到我有一个非默认值时,php_admin_value[session.save_path]
我删除了这个设置,并且一切都变得更好了。
答案1
Opcode 缓存和 http 缓存是截然不同的事情 - 只有非常简单的分析会混淆这两者。
虽然您的 HTTP 标头在大多数情况下会阻止 HTTP 缓存,但它们并不正确。
你没说为什么您认为数据已被缓存。
当我意识到 php_admin_value[session.save_path] 没有默认值时,我修复了这个问题
下次使用 Web 开发人员工具检查您的 Web 服务器和 PHP 日志以及发送到您的浏览器的内容。