我正在构建一个框架,其中产品实例使用主框架文件,直到有它自己的该文件版本的副本。为了实现这一点,我做了以下事情:
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 可能在它的 include() 中使用 file_exists;并认为新文件仍然不存在。我尝试重新启动 Apache,但没有任何效果。
不幸的是,跑步clearstatcache(true);
也无济于事。只有在我删除了 MY_FRAMEWORK_ROOT/file 后,它才会考虑清除缓存并重试,从而找到 MY_PRODUCT_ROOT/file。
我有点难过,我知道我们需要刷新 PHP/Apache 对文件是否存在的理解,但clearstatcache(true);
没有帮助......
有任何想法吗?
更新:更正,重新启动 Apache 现在似乎有帮助。我重申,这仅在尝试将文件添加到 MY_PRODUCT_ROOT 以与现有的 MY_FRAMEWORK_ROOT 文件重叠以进行自定义时发生
更新:开发环境是 Windows 上的 Zend Server CE PHP 5.3.14,生产环境 Centos linux httpd,PHP 5.3+。在我的开发环境中启用 Zend 优化器这一事实可能会产生影响,也不使用 APC 或任何其他缓存脚本