我遇到了运行我们的Web应用程序升级的问题。
升级脚本完成并通过浏览器访问Web应用程序后,我们在require_once()上找到文件未找到的错误,因为我们移动了一些文件并且PHP仍然缓存了旧的目录结构。
如果我们将realpath_cache_ttl的默认值设置为120秒,那么一切都会自行解决,但由于显而易见的原因,这是不可接受的。
所以我尝试使用clearstatcache并取得了有限的成功。我创建了一个单独的文件(clearstatcache.php),它只调用这个函数(这是一个单行文件),并通过curl在我们的安装脚本中调用它:
<?php
clearstatcache(true);
这似乎不起作用,但是如果我通过浏览器调用此文件,它会立即开始工作。
我正在运行PHP 5.3版
我开始查看浏览器和curl之间的请求标头差异,我唯一能看到的可能是PHPSESSID cookie。
所以我的问题是,目前的PHPSESSID是否重要(我认为不应该)。我的卷曲脚本有问题吗?我正在使用
curl -L http://localhost/clearstatcache.php
编辑:经过进一步研究,我认为这可能与运行的多个apache进程有关。 clearstatcache只会清除当前apache进程的缓存 - 当浏览器发出请求时,不同的apache进程会为请求提供服务,而且此进程仍然具有旧缓存。
答案 0 :(得分:2)
由于mod_php,缓存是Apache子进程的一部分,因此您的解决方案可能是重新启动Apache服务器。
如果您使用的是FastCGI(在Apache或其他Web服务器下),解决方案可能会重新启动您正在使用的任何进程管理器。
此步骤可能应成为标准部署计划的一部分。请注意,您可能还需要清除其他缓存。