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

PHP包括路径顺序和状态缓存,php,caching,zend-server-ce,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 在我将文

我正在构建一个框架,其中产品实例使用主框架文件,直到有了该文件自己版本的副本。为此,我做了以下工作:

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正在缓存include,人们会认为运行
clearstatcache(true)以清除任何状态缓存。PHP可能使用包含()的文件_;并认为新文件仍然不存在。我尝试重新启动Apache,但没有效果

不幸地运行
clearstatcache(true)也没有帮助。只有当我删除了我的\u FRAMEWORK\u ROOT/文件后,它才会认为需要清除缓存并重试,从而找到我的\u PRODUCT\u ROOT/文件

我有点困惑,我知道我们需要更新PHP/Apache对文件是否存在的理解,但是
clearstatcache(true)没有帮助

有什么想法吗

更新:更正,现在重启Apache似乎有帮助。我重申,只有在尝试将文件添加到MY_PRODUCT_根目录时才会发生这种情况,以便与现有MY_FRAMEWORK_根目录文件重叠以进行自定义

更新:开发环境是Windows上的Zend Server CE PHP 5.3.14,生产环境是Centos linux httpd,PHP 5.3+。Zend optimizer在我的开发环境中启用这一事实可能会产生影响,而且不使用APC或任何其他缓存脚本

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


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

更准确地说,重新启动apache只在调用clearstatcache时起作用。实际上,我必须删除框架文件,然后重新加载页面,然后将框架文件放回。是否启用了apc缓存?(或另一个optcode缓存)我也无法在php-5.3.3和apache 2.2.16上重现您的问题。你能提供更多关于你的环境的信息吗?@NikoSams nope没有使用APCcaching@Lars我正在使用ZendServer PHP 5.3.14(dev enviro)将在Centos server PHP 5.3+上运行,现在我看到了PHP信息,它可能与Zend Optimizer有关。。。请注意,你可以接受你自己的答案。另外,请检查当Zend Optimizer+处于活动状态时,
clearstatcache(true,true)
是否会产生差异?如果没有,您应该在产品主页上提交错误报告。