gpt4 book ai didi

php - Zend Framework 1.11.11 包含路径 open_basedir 问题

转载 作者:行者123 更新时间:2023-12-04 05:52:19 25 4
gpt4 key购买 nike

我在这个网站上看到了很多关于这个确切问题的问题,但我很确定我的情况有点不同。我最近从 ZF 1.9.6 升级到 1.11.11,从那时起,我的生产服务器上的事情就停止了。

我的本地主机正在运行 PHP 5.3.8 服务器运行时 5.2.11 .我不确定这是否与它有关,但我想我会提到它以防万一。

当我第一次升级框架时,我得到了一堆 open_basedir restriction in effect.错误。我通过删除 get_include_path() 解决了其他几个人提到的问题从调用 set_include_path()在 index.php 文件中。 As mentioned here .

这修复了 open_basedir 错误,但现在我在其他地方遇到了问题。由于各种原因在几个不同的文件中,我通过 include 包含文件。和 require使用相对路径的语句。

例如:

require_once 'application/models/MyModel.php';

但是现在突然不行了!我不得不突然在所有这些路径前面加上 ./像这样:
require_once './application/models/MyModel.php';

问题是,也有很多实例需要手动浏览并找到所有这些实例并进行更改。相反,我想弄清楚为什么这些路径不再在服务器上工作,而是继续在我的本地主机上工作。

我的倾向是这与我不再包含 get_include_path() 的事实有关。参加 set_include_path()在 index.php 文件中,但我不确定。

任何人都可以提供一些见解吗?谢谢!

最佳答案

我怀疑这与 this note 有关关于 open_basedir:

The restriction specified with open_basedir is a directory name since PHP 5.2.16 and 5.3.4. Previous versions used it as a prefix.



将其检查为前缀和将其检查为目录之间的区别肯定会导致这样的问题。

解决方案可能与 this note 有关在 PHP 文档中:

Using a . in the include path allows for relative includes as it means the current directory. However, it is more efficient to explicitly use include './file' than having PHP always check the current directory for every include.



因此,在设置包含路径时,我认为您应该像这样修改链接到的示例:
set_include_path(
APPLICATION_PATH . './../library' . PATH_SEPARATOR .
APPLICATION_PATH . './../library/Zend'
);

注意“.”我在第一个正斜杠之前添加。这应该使它相对于当前工作目录,并阻止您像 ./file 那样创建包含。 .

此外,这表示此方法效率较低,因此您也可以考虑使用诸如 TextCrawler 之类的工具。对多个文件进行查找和替换。

此外,您还可以包含 '.' (当前目录 - 或文档根目录)在您的包含路径中进行设置。像这样:
set_include_path(APPLICATION_PATH . '../library' 
. PATH_SEPARATOR . APPLICATION_PATH . '../library/Zend'
. PATH_SEPARATOR . '.' // <-- notice this!
);

关于php - Zend Framework 1.11.11 包含路径 open_basedir 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9935596/

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