include_path定义的是一个全局的路径搜索范围
就象DOS下的path.在用include()时,它是从当前目录找起,如果当前目录 没有,才按照include_path设置的找。
你比如说我要包含一个/usr/web/hqywork/doc/1.php的文件
我的当前目录比如说是:/usr/web/hqywork
我可以用:include(‘/usr/web/hqywork/doc/1.php’);//用绝对路径
也可以用:include(‘doc/1.php’); //用相对路径。
PHP在遇到require(_once)/include(_once)的指令的时候, 首先会做如下的判断:
1. 要包含的文件路径是绝对路径么?
2. 如果是, 则直接包含, 并结束.
3. 如果不是, 进入另外的逻辑(经过多次调用, 宏展开后进入_php_stream_fopen_with_path)寻找此文件.
接下来, 在_php_stream_fopen_with_path中, 会做如下判断
1. 要包含的文件路径是相对路径么(形如./file, ../dir/file, 以下用”目录相对路径代替”)?
2. 如果是, 则跳过include_path的作用逻辑, 直接解析相对路径(随后单独介绍).
会根据include_path,和当前执行文件的path组成一个待选的目录列表
然后, 依次从待选列表头部开始, 根据DEFAULT_DIR_SEPARATOR(本文的环境是”:”)取出待选列表中的一个路径, 然后把要包含的文件名附加在这个路径后面, 进行尝试. 如果成功包含, 则返回, 否则继续下一个待选路径.
因为使用include_path和相对路径的情况下, 性能会和寻找的次数有关, 最坏的情况下, 如果你有10个include_path, 那么最多可能会重试11次才能找到要包含的文件,
所以, 在能使用绝对路径的情况下最好使用绝对