【问题标题】:PHP: Why isn't my `set_include_path()` working when pointing up one directory?PHP:为什么我的 `set_include_path()` 在指向一个目录时不起作用?
【发布时间】:2013-02-10 21:48:33
【问题描述】:

我正在尝试将一个小库插入到我的项目中。这个库有一些跨类的包含和要求,所以我正在尝试设置一个包含路径以使所有这些都可以工作。

在尝试设置兄弟分支的包含路径时,我遇到了问题。

作为参考点,require('/../my/test.php') 工作正常。

也是这样

set_include_path('/../');
require_once('my/test.php');

但一旦我尝试

set_include_path('/../my/');
require_once('test.php');

我明白了:

警告:require_once(one.php):打开流失败:...中没有这样的文件或目录

我错过了什么?

【问题讨论】:

  • 不要使用这样的相对路径,很容易搞砸一切。使用dirname(__FILE__) 参考当前文件,并在每个文件中建立相对路径。只是我的偏好。示例:require_once(dirname(__FILE__).'/../my/test.php');

标签: php require-once set-include-path


【解决方案1】:

/ 开头的路径意味着查看根目录,因此/../ 在技术上是一个目录根目录之上。

要将包含路径设置为当前位置的父目录,您只需要../。为了使代码更具可移植性,我建议将其与dirname(__FILE__) 结合使用以获取当前目录的绝对路径。

IE:

set_include_path(dirname(__FILE__) . '/../my/');

注意前面的/ 在该示例中是必需的,因为dirname() 不返回尾部斜杠

【讨论】:

  • 谢谢,我会尽快将其标记为答案。
  • 使用dirname(__FILE__) 将其传递给set_include_path() 在我看来是完全矛盾的。他要问的是一种不被包含的不同文件中的相对路径所困扰的方法(文件A包括文件B,其中包括文件C等......)。请参阅我上面的评论。
  • 我知道,我当然不会提倡 set_include_path() 滥用项目。 OP 最好只要求直接路径。然而问题是“为什么我的set_include_path() 不工作”
  • 我是否正确理解首选建议是我浏览整个库并更新所有他们的require() 语句?还是?????
  • @mOrloff 有多种方法可以做到这一点,如果需要大量工作来改变并且一切正常,我会保留它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 2016-10-29
相关资源
最近更新 更多