PHP包括路径顺序和状态缓存

时间:2012-11-06 08:54:10

标签: php caching zend-server-ce

我正在构建一个产品实例使用主框架文件的框架,直到有一份该文件的自有版本。为实现这一目标,我做了以下工作:

set_include_path(MY_PRODUCT_ROOT.'/' . PATH_SEPARATOR . MY_FRAMEWORK_ROOT.'/');

因此,如果我致电include('view-users.php');,它将首先在MY_PRODUCT_ROOT中查找/view-users.php,如果找不到,则会查看MY_FRAMEWORK_ROOT / view-users.php。

在将文件添加到产品根目录之前,此过程非常顺利。我知道PHP / Apache正在缓存包含,人们会认为运行clearstatcache(true);来清除任何状态缓存。 PHP可能在其中使用了file_exists的include();并认为新文件仍然不存在。我试过重启Apache没有效果。

不幸的是,运行clearstatcache(true);也无济于事。只有在我删除了MY_FRAMEWORK_ROOT /文件之后才会清除缓存并再次尝试,从而找到MY_PRODUCT_ROOT /文件。

我有点难过,我知道我们需要刷新PHP / Apache对文件是否存在的理解,但是clearstatcache(true);没有帮助......

有什么想法吗?

UPDATE :更正,重启Apache似乎现在有所帮助。我重申,只有在尝试将文件添加到MY_PRODUCT_ROOT,重叠现有MY_FRAMEWORK_ROOT文件以进行自定义时才会出现这种情况

UPDATE :开发环境是Windows上的Zend Server CE PHP 5.3.14,生产环境Centos linux httpd,PHP 5.3+。在我的开发环境中启用Zend优化器的事实可能会产生影响,也不会使用APC或任何其他缓存脚本

1 个答案:

答案 0 :(得分:2)

Zend Optimizer+通过操作码缓存和优化加速PHP执行。它将预编译的脚本字节码存储在共享内存中。这消除了从磁盘读取代码并在将来访问时编译它的阶段。为了进一步提高性能,存储的字节码经过优化,可以更快地执行。

这是缓存包含中找到的文件内容,因此clearstatcache不起作用。我已经禁用了我的Zend Optimizer,现在可以使用了。