【问题标题】:Include path being ignored包含被忽略的路径
【发布时间】:2016-03-30 03:18:10
【问题描述】:

我不明白这里发生了什么。我有以下内容:

set_include_path(
    get_include_path()
    .PATH_SEPARATOR.'/home/mike/www/Zend/library/'
);

这似乎正确设置了值:

var_dump(get_include_path());
// string(61) ".:/usr/share/php:/usr/share/pear:/home/mike/www/Zend/library/"

这个应该工作,但是它会产生Fatal error: Class 'Zend\Loader\StandardAutoloader' not found

require_once 'Zend/Loader/StandardAutoloader.php';

但如果我使用完整路径,它可以正常工作:

require_once '/home/mike/www/Zend/library/Zend/Loader/StandardAutoloader.php';

任何想法为什么在这种情况下不使用包含路径?

【问题讨论】:

  • 使用 require() 时是否有效? require 'Zend/Loader/StandardAutoloader.php';
  • @ZamronyP.Juhara 我看不出有什么不同,但不,它不起作用。

标签: php path include


【解决方案1】:

来自Include documentation

文件是根据给定的文件路径包含的,或者,如果没有给出, 指定的 include_path。如果文件在 include_path, include 最终会检入调用脚本自己的 失败前的目录和当前工作目录。

如果您使用Zend/Loader/StandardAutoloader.php,则假定给出了文件路径,因此它使用了这个当然不指向正确目录的路径。如果你使用StandardAutoloader.php,那么它使用include_path 来找到这个。

【讨论】:

  • 其实我做得对。如您所见,我将包含路径设置为包含 Zend 位置。但是,请参阅我的答案以了解实际情况。
【解决方案2】:

来自include manual

如果找不到文件,include 构造会发出警告;这是与 require 不同的行为,会发出致命错误。

然后我注意到脚本在require 期间没有发出致命错误,而是在导致错误的下一行:

$loader = new Zend\Loader\StandardAutoloader($config);

因此,require 行包含 something,只是该内容不包含 Zend\Loader\StandardAutoloader 类。

然后我整理了这个小脚本,看看它是从哪里来的:

$include_paths = explode(PATH_SEPARATOR, get_include_path());
foreach ($include_paths as $path) {
    $file = 'Zend/Loader/StandardAutoloader.php';
    echo $path .'/'. $file;
    echo '...';
    echo (file_exists($path . '/'. $file)) ? '<b>exists</b>' : 'doesnt exist';
    echo '<br>';
}

这是结果:

./Zend/Loader/StandardAutoloader.php...doesnt exist
/usr/share/php/Zend/Loader/StandardAutoloader.php...exists
/usr/share/pear/Zend/Loader/StandardAutoloader.php...doesnt exist
/home/mike/www/Zend/library/Zend/Loader/StandardAutoloader.php...exists

原来我有两个文件,与我试图包含的内容相匹配。当我打开/usr/share/php/Zend/Loader/StandardAutoloader.php 时,我可以看到它使用了没有命名空间的Zend_Loader_StandardAutoloader 类。这来自 Zend 框架 1.12.9,但我的应用使用的是 2.2 版。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2018-10-05
    • 1970-01-01
    • 2022-10-23
    • 2019-10-19
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多