【问题标题】:why is include_path in php.ini being ignored?为什么忽略 php.ini 中的 include_path?
【发布时间】:2013-07-30 16:27:27
【问题描述】:

我有一个 zend 库,为了简单起见,我把它放在了根目录中。 (/library/zend/...) 我将路径添加到我的 php.ini include_path 并取消注释。 (include_path = ".:/library/" )。

在我的网站文件中我有require_once 'Zend\Loader.php';

但是当我尝试访问我得到的页面时:

 Warning: require_once(Zend/Loader.php): failed to open stream: 
          No such file or directory  in /var/www/TEST/index.php on line 7

 Fatal error: require_once(): Failed opening required 'Zend/Loader.php' 
    (include_path='.:/usr/share/php:/usr/share/pear') 
    in /var/www/TEST/index.php on line 7

它为什么要找梨?这些目录甚至都不存在。

我需要完整的路径并且有效(那么 zend 不知道在哪里寻找其他所有内容,但它能够找到 loader.php)所以我认为这意味着权限是可以的。 我尝试在包含路径中添加/删除尾部斜杠,并在 php 网站文件中添加/删除前斜杠。

我在 google 上唯一能找到的是关于 .htaccess 的东西?不知道那是什么或在哪里。

我正在编辑正确的php.ini 文件,因为我能够打开和关闭错误报告。

doc_root 和 include_path 都已更改,但无法显示 phpinfo() 中的更改,即使 phpinfo() 说我正在编辑正确的 php.ini 文件

【问题讨论】:

  • 您必须使用从文件系统根目录到库的绝对路径!
  • 如果你在 require/include 调用中使用绝对路径,那么 include_path 会被NOT检查,因为你告诉 PHP 文件的确切位置。跨度>
  • phpinfo() 可以分辨出哪些额外的 ini 文件被解析,显然,有些东西 覆盖 你的 include_path
  • 您输入的包含路径不在显示错误的包含路径中,因此它在某处被覆盖。如果你有的话,你能看看public/index.php中是否有任何包含路径的东西吗?
  • 我只使用绝对路径(这只是意味着完整路径对吗?)来测试权限。我将把它保留为 require_once 'Zend\Loader.php';。我的文件中没有任何内容覆盖包含路径,但也正在加载这些 ini 文件:etc/php5/apache2/conf.d/10-pdo.ini、/etc/php5/apache2/conf.d/20-gd.ini , /etc/php5/apache2/conf.d/20-mcrypt.ini, /etc/php5/apache2/conf.d/20-mysql.ini, /etc/php5/apache2/conf.d/20-mysqli。 ini, /etc/php5/apache2/conf.d/20-pdo_mysql.ini...

标签: php zend-framework


【解决方案1】:

当您更改 php.ini 中的 include_path 时,更改将影响您的所有项目。

更好的办法是使用set_include_pathget_include_path php 函数来更新当前应用程序的路径。

记住,路径必须是绝对路径, 所以这或多或少是这样的:

set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'),
    APPLICATION_PATH . '/../vendor/',
    get_include_path(),
)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 2012-06-16
    • 1970-01-01
    • 2012-09-06
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    相关资源
    最近更新 更多