gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 13:28:30 24 4
gpt4 key购买 nike

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

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 文件以进行自定义时发生

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

最佳答案

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

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

关于PHP 包含路径顺序和状态缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13247498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com