关于 PHP 的 include 的问题
新人第一次问,请各位见谅 在 www 文件夹下面有两个文件夹 w1 和 w2 还有一个文件 a.php 在 w1 里有 b.php w2 里有 c.php a.php 已经 include'w1/b.php'
现在想让 c.php include a.php 但是 c.php include'../a.php'的时候会提示找不到 b.php 请问该如何解决。
----------------------- 以下是精选回复-----------------------
答:include 的时候用__DIR__
比如
include __DIR__ . "/w1/b.php";
include __DIR__ . "../a.php";
答:include(realpath("./")."w1/b.php");
答:set_include_path()
答:用__DIR__的话,基本上可以抹平目录的问题了,也即每个文件只关注被引用文件和自身之间的相对目录关系。
答:现代 PHP 都用 autoload 技术了
答:我碰到过,大致是这样 a 包含 b , b 包含 c ,如果用相对定位那么起始是 a ,也就是此时 b 里面的包含路径不能是以 b 为起始,你可以认为是 b 的代码进入了 a ,自然再从原本的包含路径是包含不了 c 的。另外应该同楼上所说的方式,你的方式会造成各种混乱的。大概是这样,有错误请告知。
答:相对路径的锅。。
看过的一个比较好的思路是 在主入口设置一个值为入口点路径的常亮,然后其他 php 文件都以这个常量的值为基准去 include 其他文件。这样就能有效避免 include 时路径乱撞的问题了,简洁明了
答:我上面说的那个例子不仅仅适用于单入口模式,多入口也可以,但最好所有的入口都在顶层父目录里,不然还是会麻烦不断
答:用 autoload 吧,一直 require/include 会让人崩溃的
答:新人来学习
答:没有 autoload 或 naming space ,至少做一个 Project Root 的常量也好。
BP - Base Path
DS - Directory Separator
BP . DS . 'a.php'
BP . DS . 'w1' . DS . 'b.php'
BP . DS . 'w2' . DS . 'c.php'
答:使用 autoload 延迟加载,使用的时候才 require 文件
0条评论