新人第一次问,请各位见谅 在 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 请问该如何解决。
1
Tyanboot 2017-04-03 00:37:57 +08:00 via Android
include 的时候用__DIR__
比如 include __DIR__ . "/w1/b.php"; include __DIR__ . "../a.php"; |
2
lesloli OP @Tyanboot 我好想理解您的意思,但我的问题是
c.php include a.php 时 也会执行 a.php 里的"include 'b.php' "但是执行的目录并不是 a.php 所在的目录,而是 c.php 所在的目录。 所以会导致去寻找 /w2/w1/b.php 这个文件 |
3
atnopc 2017-04-03 01:46:12 +08:00
include(realpath("./")."w1/b.php");
|
4
allblue 2017-04-03 01:47:40 +08:00
set_include_path()
|
6
dangyuluo 2017-04-03 05:59:13 +08:00
用__DIR__的话,基本上可以抹平目录的问题了,也即每个文件只关注被引用文件和自身之间的相对目录关系。
|
7
sagaxu 2017-04-03 11:06:31 +08:00
现代 PHP 都用 autoload 技术了
|
8
FYK 2017-04-03 11:21:29 +08:00 via iPhone
我碰到过,大致是这样 a 包含 b , b 包含 c ,如果用相对定位那么起始是 a ,也就是此时 b 里面的包含路径不能是以 b 为起始,你可以认为是 b 的代码进入了 a ,自然再从原本的包含路径是包含不了 c 的。另外应该同楼上所说的方式,你的方式会造成各种混乱的。大概是这样,有错误请告知。
|
9
GoBeyond 2017-04-03 12:18:45 +08:00 via Android
相对路径的锅。。
看过的一个比较好的思路是 在主入口设置一个值为入口点路径的常亮,然后其他 php 文件都以这个常量的值为基准去 include 其他文件。这样就能有效避免 include 时路径乱撞的问题了,简洁明了 |
10
GoBeyond 2017-04-03 12:20:32 +08:00 via Android
我上面说的那个例子不仅仅适用于单入口模式,多入口也可以,但最好所有的入口都在顶层父目录里,不然还是会麻烦不断
|
11
crispgm 2017-04-03 14:11:47 +08:00
用 autoload 吧,一直 require/include 会让人崩溃的
|
12
weidianlai 2017-04-03 14:23:13 +08:00 via iPhone
新人来学习
|
13
Tyanboot 2017-04-03 16:40:48 +08:00 1
@lesloli 没问题的。__DIR__是当前脚本所在目录,并且如果是在被 include 的 php 里面的话,__DIR__的内容是被 include 的 php 的目录,是经过修正的。
不过我 1 楼说的有点问题,__DIR__是不包括结尾的分隔符的,所以应该是 include __DIR__ . "/../a.php"; |
14
cxbig 2017-04-03 16:47:34 +08:00 via iPhone
没有 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' |
15
mingyun 2017-04-22 16:11:51 +08:00
使用 autoload 延迟加载,使用的时候才 require 文件
|