PHP的require-once机制

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次才能找到要包含的文件,

http://www.voidcn.com/article/p-yqihbiui-oa.html

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在PHP中,有两种包含外部文件的方式,分别是include和require。他们之间有什么不同呢? 如果文件不存在...
    ZyBlog阅读 1,603评论 0 0
  • 一、简介 include和require都是引入指定的文件。_once表示只引入一次,即之前已经引入过的不再引入。...
    四月不见阅读 3,401评论 0 1
  • 引用文件是将另一个源文件的全部内容包含到当前源文件汇中进行使用,引用外部文件可以减少代码的重复编写。PHP提...
    mysimplebook阅读 6,301评论 0 0
  • 文件加载 有4个文件加载的语法形式,他们本质是一样的,都是用于引入一个外部文件到当前的PHP代码中。 includ...
    kangyiii阅读 1,733评论 0 2
  • php.ini设置,上传大文件: post_max_size = 128Mupload_max_filesize ...
    bycall阅读 11,807评论 3 64

友情链接更多精彩内容