php中include包含文件路径查找过程
首先,“路径”分为三种:
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包含文件路径查找过程的更多相关文章
- C++中#include包含头文件带 .h 和不带 .h 的区别
C++中#include包含头文件带 .h 和不带 .h 的区别? 如 #include <iostream> 和 #include <iostream.h> 包含的东西有哪些 ...
- MinGW中的头文件路径级环境变量设置
整理自 MinGW中的头文件路径 C头文件目录%MINGW_PATH%/include下有头文件,里面有strcpy等c函数的声明. C++头文件目录%MINGW_PATH%/lib/gcc/mi ...
- asp.net使用include包含文件
么?用asp.net使用include包含文件?……有必要吗?使用“用户控件”不是更好吗? 当然,绝大多数情况下,用户控件都能解决问题.但若要在用户控件中需包含其他公用块,即使用用户控件嵌套,老是出问 ...
- UWP 中的各种文件路径(用户、缓存、漫游、安装……)
原文 UWP 中的各种文件路径(用户.缓存.漫游.安装……) UWP 提供了多种不同文件路径访问方式,对应到不同的文件路径中.可能我们只是简单用 ApplicationData.Current 获取一 ...
- 总结:WPF中ResourceDictionary资源文件的查找和遍历方法
原文:总结:WPF中ResourceDictionary资源文件的查找和遍历方法 一.查找包含制定关键字的资源 ResourceDictionary GetThemeDictionary() ...
- django项目部署在Apache服务器中,静态文件路径的注意点
django Apache部署静态文件的路径注意点 静态文件放在对应的 app 下的 static 文件夹中 或者 STATICFILES_DIRS 中的文件夹中. 当 DEBUG = True 时, ...
- Python中的相对文件路径的调用
先让我们来看看一个用到相对文件路径的函数调用的问题.假设现在有两个脚本文件main.py和func.py,他们的路径关系是: . |--dir1 |--main.py |--dir2 |--func. ...
- Python模块学习:glob 文件路径查找
glob模块是最简单的模块之一,内容非常少. 用它可以查找符合特定规则的文件路径名.跟使用windows下的文件搜索差不多. 查找文件只用到三个匹配符:”*”, “?”, “[]”. ”*”匹配0个或 ...
- Git .gitignore中已添加文件路径,但仍未被忽略
当文件之前已经被提交到仓库后,后面即使将文件路径添加到 .gitignore ,使用 git status 命令,依然会看到文件被修改. $ git status 位于分支 master 您的分支与上 ...
随机推荐
- OpenStack的bridge_sto off的解释
北京_张华(28620211) 2014/1/27 星期一 11:10:57传统的网络是通过STP协议来避免交换机在二层形成环路,但是对于虚拟交换机,因为有东西向的流量,故将bridge_stp设成o ...
- ubuntu 修改ssh远程主机名称,mac开机运行命令,静默方式启动virtual box虚拟机,静默执行run脚本
一.修改主机名 ssh登陆 vi /etc/hostname vi /etc/hosts hostname ulocal (执行这个命令,无须重启服务器) 保证127.0.0.1 的hostname与 ...
- VBS数组函数学习实例分析
Array 函数 返回包含数组的Variant. Array(arglist) 参数:arglist是赋给包含在Variant中的数组元素的值的列表(用逗号分隔).如果没有指定此参数,则将会创建零长度 ...
- 团队小组开发nabc分析
我们团队开发的项目为:牛逼的手电筒 NABC模型: 1.N:现在每个人几乎走哪,干什么都会拿着手机,而现在年轻人晚上在外面的也不少,所以手机里安装一个手电筒的APP还是很有必要的. 2.A:这学期正在 ...
- ArrayList、LinkedList、Vector的区别
Arraylist和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加插入元素,都允许直接序号索引元素,但是插入数据要涉及到数组元素移动等内存操作,所以插入数据慢,查找有下标, ...
- 【扩展】Canvas绘制列表的尝试
传送:http://www.alloyteam.com/2015/10/canvas-attempts-to-draw-list/ 来自:on 2015年10月30日 by TAT.Cson view ...
- IntelliJ IDEA 15激活
1.按正常的安装方法安装好IDEA : 2.使用iteblog提供的License server(服务器地址为http://www.iteblog.com/idea/key.php)进行注册 ---- ...
- RobotFramework-登录
*** Settings *** Library Selenium2Library *** Test Cases *** login [Setup] open browser http://XXX/X ...
- HDU 5293 Tree chain problem 树形dp+dfs序+树状数组+LCA
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5293 题意: 给你一些链,每条链都有自己的价值,求不相交不重合的链能够组成的最大价值. 题解: 树形 ...
- 02.Apache FtpServer使用数据库管理用户
1.创建数据库及表 使用\apache-ftpserver-1.0.6\res\ftp-db.sql建表,内容如下: CREATE TABLE FTP_USER ( userid VARCHAR(64 ...