我的服务器上遇到了一个奇怪的缓存问题,我正在处理的项目此时没有启用任何缓存,但服务器本身安装了 APC(默认设置为缓存所有内容,现在已被禁用)。
问题是,我的旧代码仍在运行,我不知道如何触发修改后的代码。
我尝试过完全删除该文件,这会导致我的项目出现“丢失文件”的错误,但是一旦我上传我的文件(新版本),它就会再次开始提供旧版本的文件。
我已经上传了一个带有唯一标签的文件apc_clear_cache();
,但这apc_clear_cache( 'opcode' );
似乎没有帮助。
我还注释掉了使用 PHP 加载的 APC,但它仍然提供旧文件,所以我想知道是否有潜在的原因导致了这种积极的缓存。
Apache2、PHP、APC 等均使用 Debian Wheezy 上的 Aptitude 加载
PHP 5.4.4-14+deb7u3(在 mod_php 下运行)Apache 2.2.22
在每次配置更改和禁用 APC 之间我都进行了完整的 apache 重启。
我检查了 apache2 模块列表,没有加载缓存模块,也没有运行诸如 varnish 等服务。
更新
做了一些额外的测试,在输出标签之前添加了一些 html 输出<?php
,因此 php 标签之外的内容似乎没有被缓存。
未更新的文件被包含在内include_once()
,并且禁用 APC 似乎不会对错误提供的文件产生任何影响。
问题在于尝试在表单提交后使用 HTML2PDF 生成 .pdf 文件
PHP Fatal error: Uncaught ERROR File : /lib/html2pdf/html2pdf.class.php Line : 1319, Impossible to load the image 'logo.png' thrown in /lib/html2pdf/html2pdf.class.php on line 1319
新版本的文件使用logo.jpg
答案1
在 APC 中,这种情况最常见的原因是apc.stat
关闭,或者声明 ctime 而不是 mtime 或反之亦然,具体取决于您的 SCCS。您可能希望通过类似 来验证 APC 是否确实已禁用phpinfo()
。