include_path详细解析
原文地址:http://www.laruence.com/2010/05/04/1450.html
1.php默认的包含路径为 .;C:\php\pear 即为当前目录和C:\php\pear目录
2.如果设置ini_set("include_path", ""); 则改变为默认们目录(即为上面的)
运行时的包含顺序:
1.如果为绝对路径 则直接包含, 并结束(找不到直接退出).
2.如果是是相对路径((形如./file, ../dir/file) 则跳过include_path的作用逻辑, 直接解析相对路径(找不到直接退出)
注意:在使用相对路径的包含文件的情况下,如果一个文件被另一个文件所包含,则这个文件的”相对“则指的是包含他的那个文件
3.都不是以上两种情况
会根据include_path,和当前执行文件的path组成一个待选的目录列表 (即先include path 再当前文件所在的目录,注意:文件的真实目录)
然后, 依次从待选列表头部开始, 根据PATH_SEPARATOR(windows下是”;”,linux下是":")取出待选列表中的一个路径, 然后把要包含的文件名附加在这个路径后面, 进行尝试. 如果成功包含, 则返回(不在向下寻找), 否则继续下一个待选路径.
小结:
1. 因为使用include_path和相对路径的情况下, 性能会和寻找的次数有关, 最坏的情况下, 如果你有10个include_path, 那么最多可能会重试11次才能找到要包含的文件, 所以, 在能使用绝对路径的情况下最好使用绝对路径.
2. 因为目录相对路径的basedir, 永远都是当前工作路径, 如果要使用, 需要和实际部署路径相关, 所以实际使用的很少(当然, 也有借助chdir来完成的模块).
3. 在模块化的系统设计中, 一般应该在模块内, 通过获取模块的部署路径(dirname(__FILE__), php5.3以后更是提供了__DIR__常量)从而使用绝对路径.
4,在验证顺序第二点时,可以包含同一个文件,但是两个文件里输出不同的内容,一个放在path里,一个放在相对路径的位置,然后通过输出结果判断。 ---结果是---先解析相对路径位置,然后才是path路径