深入了解需求/包括PHP的连续推荐
include_path如何工作
如果有一个以上的include_path为了什么
在什么情况下include_path不工作
今天,我想对这个问题作一个全面的介绍。让我从一个例子开始。
目录结构如下:1.php 3.php根目录下刚刚2.php 3.php
在1.php:
复制代码代码如下所示:
< PHP
ini_set(include_path
需要(2);
>
在2.php:
复制代码代码如下所示:
< PHP
需要(3);
>
在根目录下,该3.php打印出根,在子目录子目录的目录打印3.php;
现在,我的问题来了:
1。在根目录下运行1.php时,输出将得到什么
2。运行在子目录上一级目录的1.php,输出将得到什么
三.如果当前目录的路径(即include_path = path_to_subdir)在include_path取消,将上述两个问题的输出
include_path PHP
当PHP符合指令的要求(_once) /包括(_once),它会先判断如下:
复制代码代码如下所示:
要包含的文件路径是绝对路径
如果是,它是直接包含和结束的。
如果没有,进入另一个逻辑(后多称,宏观扩展到_php_stream_fopen_with_path)来查找文件
其次,在_php_stream_fopen_with_path,以下就将作出判断:
复制代码代码如下所示:
要被包含的文件路径是相对路径(形状类似于文件、文件,而不是目录相对路径)
如果是这样的话,跳过include_path功能逻辑和解析相对路径直接(随后由一个单独的介绍)
据include_path和当前的可执行文件的路径,一个列表中选定的房源应。例如,要选择以下列表。
复制代码代码如下所示:
:path_to_subdir:current_script_dir
然后,要选择从头开始的列表,根据default_dir_separator(本文的环境:选择一个路径)中的列表,然后包括在尝试路径附加文件名称。如果成功返回,否则包含,继续在所选路径旁边。
到目前为止,我们已经能够回答我在开始时提出的3个问题了。
1。因为在根目录下执行的,所以它包含的2.php 1.php,第二候选路径include_path发挥作用(path_to_subdir),path_to_subdir / 2.php被发现,包含在2.php时间3.php,当前的工作目录是根,所以当包含有3.php,选择路径include_path第一。(当前工作目录)查找匹配文件,因此输出是root。
2。同样的1,但当前路径的子目录,所以输出目录下。
3,因为有include_path没有电流路径,所以在根目录下运行时,当2.php包含3.php,path_to_subdir扮演了一个角色,所以根目录下的子目录或将输出。
如果include_path排空2.php,
复制代码代码如下所示:
< PHP
ini_set(include_path
需要(3);
>
然后将current_script_dir,这次current_script_dir是2.php路径,因此它会输出的子目录。
目录的相对路径
在目录的相对路径的情况下,相对路径的基总是当前工作目录。
为了解释在目录的相对路径的情况下,我们看看上面的例子,或目录结构,只有1.php成:
复制代码代码如下所示:
< PHP
ini_set(include_path
要求(, /子目录/ 2。PHP );
>
2.php变成:
复制代码代码如下所示:
< PHP
需要(3);
>
如果在根目录下执行,2.php 3.php将寻求在当前目录的相对路径找到,所以输出是根,如果是在子目录1.php目录执行(PHP - F。 / 1。PHP),将辞职。 / / 2.php发现子目录在子目录不。
后记
1。因为,业绩将相关条件下的include_path和相对路径的使用和查找的次数,最坏的情况下,如果你有10 include_path,那么最有可能的重试11次找到要包含的文件,以便在使用绝对路径绝对路径的最佳使用。
2,因为目录的相对路径的则始终是当前工作路径。如果它被使用,它需要的是实际的部署路径相关,所以很少有实际用途(当然,有模块,可完成chdir)。
3,在模块化的系统设计中,一般应该使用绝对路径获取模块的部署路径(目录(__file__)和PHP5.3以后提供__dir__常数)在模块。