include("include_path")函数包含路径详讲__PHP_include()

来源:互联网 发布:留学生 知乎 编辑:程序博客网 时间:2024/05/20 20:43

问题:

在项目开发中,经常需要涉及到 include()函数,其中经常会涉及到嵌套使用include的情况.如何确认include的确切包含路径?下面是针对这个问题的展开.


现在研究根目录的规律问题.

scene:MAC OSX/APACHE/PHP

涉及函数:include

基本:

当前路径: ./

上一级路径: ../


>>>实验一:

寻找include(控制结构)的include_path原理.

    A:运行目录与物理目录?    Q:如下实验一,针对b.php来说,    运行目录是/htdoc/    逻辑目录是/htdoc/one/       因为此实验是是运行a.php文件


假设1:include_path=运行目录

假设2:include_path=物理位置目录

假设3:include-path有优先级,先寻找运行目录,再寻找物理目录,[找到马上返回,只返回一个文件].

假设4:include-path有优先级,先寻找物理目录,再寻找运行目录,[找到马上返回,只返回一个文件].


/htdoc/a.php

<?phpheader("Content-type:text/html;charset=utf-8;");include './one/b.php';?>

>>>

/htdoc/one/b.php

<pre name="code" class="php"><?phpecho '<br />包含./one/b.php成功<br />';include './one/html.php';?>

>>>

/htdoc/one/html.php

<?phpecho '<br />包含/htdoc/one/html.php成功<br />';echo '假设1:include=逻辑运行目录 成立';?>

>>>

/htdoc/one/one/html.php

<?phpecho '<br />包含/htdoc/one/one/html.php成功<br />';echo '假设2:include_path=物理位置目录 成立';?>

>>>实验一结果(运行a.php):

输出

包含./one/b.php成功包含/htdoc/one/html.php成功假设1:include=逻辑运行目录 成立


>>>实验二

保留实验一中的

/htdoc/a.php

/htdoc/one/html.php

/htdoc/one/one/html.php

修改:/htdoc/one/b.php

/htdoc/one/b.php

<pre name="code" class="php"><?phpecho '<br />包含one/b.php成功<br />';include 'one/html.php';?>

>>>实验二结果(运行a.php):

输出

包含./one/b.php成功包含/htdoc/one/html.php成功假设1:include=逻辑运行目录 成立
结论:与实验一输出结果一致.

>>>实验三

保留实验二中的

/htdoc/a.php

/htdoc/one/b.php

/htdoc/one/one/html.php

删除:/htdoc/one/html.php

>>>实验二结果(运行a.php):

输出

包含./one/b.php成功包含/htdoc/one/one/html.php成功假设2:include_path=物理位置目录 成立

结论:出乎意料,假设2成立.


>>>综合结论:

include被嵌套多层时,include的参数[也就是路径也就是include_path]是有差异的.

A:差异在哪里?

Q:[比较难描述...]举例说明.include_path的值是关键,这个值必定是一个路径.

当最前面为 ./,表示相对当前运行路径来包含文件. //如 include "./one/html.php"; 此时会寻找 /htdoc/one/html.php.

当最前面直接接文件名,include则会查找两个路径(运行路径和物理路径),优先返回运行路径. //如 include "one/html.php"; 此时会寻找/htdoc/one/html.php 和 /htdoc/one/one/html.php. 并且,如果/htdoc/one/html.php存在,则直接返回/htdoc/one/html.php


可以参考PHP手册:

include()寻找包含文件的顺序先是在当前工作目录的相对的 include_path 下寻找,然后是当前运行脚本所在目录相对的 include_path 下寻找。例如 include_path 是 .,当前工作目录是 /www/,脚本中要 include 一个 include/a.php 并且在该文件中有一句 include "b.php",则寻找 b.php 的顺序先是 /www/,然后是 /www/include/。如果文件名以 ./ 或者 ../ 开始,则只在当前工作目录相对的 include_path 下寻找。

好难表达(描述)include的性质.不管你弄没弄明白,反正我是明白了.



0 0
原创粉丝点击