clearstatcache + include_path + sessions

时间:2012-02-12 18:06:16

标签: php caching

我遇到了运行我们的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进程会为请求提供服务,而且此进程仍然具有旧缓存。

1 个答案:

答案 0 :(得分:2)

由于mod_php,缓存是Apache子进程的一部分,因此您的解决方案可能是重新启动Apache服务器。

如果您使用的是FastCGI(在Apache或其他Web服务器下),解决方案可能会重新启动您正在使用的任何进程管理器。

此步骤可能应成为标准部署计划的一部分。请注意,您可能还需要清除其他缓存。