我正在构建一个框架,产品实例使用主框架文件,直到有自己的文件的副本。为了实现这一目标,我已经完成了以下操作:
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/file时,才认为清除缓存并重试
我有点困惑,我知道我们需要刷新PHP/Apache对文件是否存在的理解,但是clearstatcache(true);
没有帮助...
有什么想法?
update :校正,重新启动Apache似乎现在有所帮助。我重申,只有在尝试将文件添加到my_product_root,重叠现有my_framework_root文件时才会发生这种情况,以进行自定义
更新:开发环境是Zend Server CE CE PHP 5.3.14,生产环境Centos Linux HTTPD,PHP 5.3 。在我的开发环境上启用Zend Optimizer的事实可能会产生效果,也不使用APC或任何其他缓存脚本
zend Optimizer 通过OPCODE缓存和优化加快了PHP的执行。它将预编译的脚本字节码存储在共享内存中。这消除了从磁盘中读取代码的阶段,并在将来访问中对其进行了编译。为了进一步改进性能,已将存储的字节码优化以用于更快的执行。
这是在包含中找到的文件内容,因此ClearStatCache不起作用。我已经禁用了Zend Optimizer,并且现在起作用。