我在理解有关PHP相对包含路径的规则集时遇到了问题。如果我运行.php文件,并且文件A.PHP包含包含文件C.PHP的文件B.PHP,那么C.PHP的相对路径应该与B.PHP的位置相关,还是与A.PHP的位置相关?也就是说,include是从哪个文件调用的重要吗?或者只关心当前工作目录是什么?是什么决定了当前工作目录?
发布于 2011-09-11 22:22:06
它相对于主脚本,在本例中是A.php。请记住,include()
只是将代码插入到当前运行的脚本中。
include也就是说,从哪个文件调用
是否重要
不是的。
如果你想让它变得重要,并且做一个与B.php相关的包含,使用__FILE__
常量(或PHP5.2IIRC以来的__DIR__
),它将始终指向代码行所在的当前文本文件。
include(dirname(__FILE__)."/C.PHP");
发布于 2011-09-11 22:51:55
@Pekka让我做到了这一点,但我只想分享我学到的东西:
getcwd()
返回您开始执行的文件所在的目录。
dirname(__FILE__)
返回包含当前执行代码的文件的目录。
使用这两个函数,您始终可以构建与所需内容相关的包含路径。
例如,如果b.php和c.php共享一个目录,则b.php可以包括c.php,如下所示:
include(dirname(__FILE__).'/c.php');
无论b.php是从哪里调用的。
事实上,这是建立相对路径的首选方法,因为额外的代码使PHP不必遍历include_path来尝试定位目标文件。
资料来源:
Difference Between getcwd() and dirname(__FILE__) ? Which should I use?
发布于 2014-05-28 12:33:38
如果包含路径不是以./
或../
开头,则包含
include 'C.php';//优先级: include_path (包含'.‘首先),//然后是当前.php
文件的路径(即B.php
),然后包含以./
或../
开头的路径,例如:
include './C.php';//相对于'.‘包含'../C.php';//还相对于‘..’
上面的.
或..
是相对于getcwd()
的,它默认为条目.php
文件的路径(即A.php
)。
在PHP 5.4.3 (构建日期: May 8 2012 00:47:34)上进行了测试。
(还要注意,chdir()
可以更改getcwd()
的输出。)
https://stackoverflow.com/questions/7378814
复制相似问题