首先,“路径”分为三种:

1、绝对路径,以/开头(unix系统)或c:等盘符开头(windows系统)。

2、相对路径,以.开头,有./(当前目录)和../(上级目录)。

3、其他路径,不是绝对路径和相对路径,直接以目录或文件名开头的路径,如include('whatever.php')。

----------------------------------------------------------有没有那么一首歌---------------------------------------------------------------

根据路径的不同,查找包含文件的过程也会不同,具体为:

1、首先记住,如果include中的路径是绝对路径或者相对路径,查找是不经过include_path的。

2、如果include中的路径是绝对路径,查找过程不需要借助其他任何条件,文件直接确定。这也是最不易出错的包含文件的方法,所以很多应用程序都会有类似下面的代码:

define('APP_PATH',realpath(dirname(__FILE__)));
define('DS',DIRECTORY_SEPARATOR); require(APP_PATH.DS.'common'.DS.'common.inc');

3、如果include中的路径是相对路径,肯定就得有个参路径,此处的参照路径为CWD(当前工作目录)。

什么是CWD?分两种情况:

  a)如果php程序是在命令行下执行的,那CWD就是你当前所在的位置。(这样就会出现在不同的目录下执行同一个php文件,有的能正确执行,有的报包含错误)

  b)如果是web服务器执行的php页面,那CWD就是入口php文件所在的目录。比如http://localhost/try.php的话就是try.php这个文件所在目录。这个时候 try.php包含的文件,以及被包含文件再次包含的文件,查找时的参照路径都是try.php所在的目录。

4、如果include中的路径是其他路径,那么php会遍历include_path中的每一个目录,并将其与include中的内容拼起来组成一个相对或绝对路径,再按生成路径的查找规则查找文件,如果查找到则查找过程结束,如果遍历完整个include_path也没能查找到文件,最后还会include所在文件的文件路径跟include内容拼起来,进行一次查找。从这也能看出用其他路径的include是效率最低的。(这也是为什么很多资料上提到include('./try.php')比include('try.php')效率高的原因。)

最后,为了易用,效率,为了祖国,为了人民,强烈推荐2中的方法包含文件。

以上都是经过自己测试以后得出的结论,有不对的地方欢迎指正!!!

php中include包含文件路径查找过程的更多相关文章

  1. C++中#include包含头文件带 .h 和不带 .h 的区别

    C++中#include包含头文件带 .h 和不带 .h 的区别? 如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些 ...

  2. MinGW中的头文件路径级环境变量设置

    整理自 MinGW中的头文件路径   C头文件目录%MINGW_PATH%/include下有头文件,里面有strcpy等c函数的声明. C++头文件目录%MINGW_PATH%/lib/gcc/mi ...

  3. asp.net使用include包含文件

    么?用asp.net使用include包含文件?……有必要吗?使用“用户控件”不是更好吗? 当然,绝大多数情况下,用户控件都能解决问题.但若要在用户控件中需包含其他公用块,即使用用户控件嵌套,老是出问 ...

  4. UWP 中的各种文件路径(用户、缓存、漫游、安装……)

    原文 UWP 中的各种文件路径(用户.缓存.漫游.安装……) UWP 提供了多种不同文件路径访问方式,对应到不同的文件路径中.可能我们只是简单用 ApplicationData.Current 获取一 ...

  5. 总结:WPF中ResourceDictionary资源文件的查找和遍历方法

    原文:总结:WPF中ResourceDictionary资源文件的查找和遍历方法 一.查找包含制定关键字的资源 ResourceDictionary GetThemeDictionary()     ...

  6. django项目部署在Apache服务器中,静态文件路径的注意点

    django Apache部署静态文件的路径注意点 静态文件放在对应的 app 下的 static 文件夹中 或者 STATICFILES_DIRS 中的文件夹中. 当 DEBUG = True 时, ...

  7. Python中的相对文件路径的调用

    先让我们来看看一个用到相对文件路径的函数调用的问题.假设现在有两个脚本文件main.py和func.py,他们的路径关系是: . |--dir1 |--main.py |--dir2 |--func. ...

  8. Python模块学习:glob 文件路径查找

    glob模块是最简单的模块之一,内容非常少. 用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多. 查找文件只用到三个匹配符:”*”, “?”, “[]”. ”*”匹配0个或 ...

  9. Git .gitignore中已添加文件路径,但仍未被忽略

    当文件之前已经被提交到仓库后,后面即使将文件路径添加到 .gitignore ,使用 git status 命令,依然会看到文件被修改. $ git status 位于分支 master 您的分支与上 ...

随机推荐

  1. oc中对象的初始化

    在.m文件中使用对象方法: - (id)init { _name =@"zhangsan"; _age = 18; return self; } 然后通过main方法中进行创建对象 ...

  2. [开源应用]利用HTTPHandler+resumableJs+HTML5实现拖拽上传[大]文件

    前言: 大文件传输一直是技术上的一大难点.文件过大时,一些性提交所有的内容进内存是不现实的.大文件带来问题还有是否支持断点传输和多文件同时传输. 本文以resumableJs为例,介绍了如何在ASP. ...

  3. java数据结构和算法------快速排序

    package iYou.neugle.sort; public class Quick_sort { public static void QuickSort(double[] array, int ...

  4. [rsync+inotify]——监控客户端文件变化,rsync同步到服务器

    关于rsync的配置请参考博文:http://www.cnblogs.com/snsdzjlz320/p/5630695.html 实验环境 (1) Rsync服务器:10.0.10.158 (2) ...

  5. 大作业NABC分析结果

    大作业NABC分析结果 这次的大作业计划制作一款关于七巧板的游戏软件.关于编写的APP的NABC需求分析: N:需求 ,本款软件主要面向一些在校的大学生,他们在校空闲时间比较多,而且热衷于一些益智类游 ...

  6. AxMicrosoft.Office.Interop.Owc11.AxSpreadsheet控件在C#中的引用

    这几天要是用AxMicrosoft.Office.Interop.Owc11.AxSpreadsheet控件做查询,发现一系列问题,一点点记录下来吧,以备后查: 第一.相关属性:http://www. ...

  7. 【Recover Binary Search Tree】cpp

    题目: Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without chan ...

  8. 安装Netsharp演示插件

    阅读本文请先阅读Netsharp下载及环境搭建 Netsharp提供了DEMO程序,DEMO完成的功能是Netsharp文章系列中的Netsharp快速入门系列中介绍的功能,DEMO是以Netshar ...

  9. Netsharp快速入门(之18) 平台常用功能(工作区相关)

    作者:秋时  转载须说明出处 第6章     平台功能 6.1     部件二次开发设置 6.1.1  工具栏管理 1.从单据二次开发-工具栏管理进入 2.主要设置显示,对应的方法名或设置权限相关操作 ...

  10. Oracle窗口函数显示想要的行数

    Oracle中支持窗口函数ROW_NUMBER(),其用法和 MSSQLServer2005中相同,比如我们 执行下面的 SQL语句: SELECT * FROM ( SELECT ROW_NUMBE ...