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 您的分支与上 ...
随机推荐
- Azure SQL 数据库与新的数据库吞吐量单位DTU
azure中新的数据库吞吐量单位 (Database Throughput Unit, DTU) 是什么,以及用户如何通过它来了解新服务级别可以提供的服务内容.DTU 对于提供预测性更强的性能体验起着 ...
- 教你怎么安装MongoDB
以下命令以root用户运行:#sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10#echo 'deb http://do ...
- [原创]一个纯css实现兼容各种主流移动pc浏览器的时间轴
废话不多说 Demo 高度完全的自适应 中心思想是table 和第二列行高的50%的上下绝对定位竖线 第一次用codepen less完全不能用啊 连node png之类的都是关键词会被去掉... 马 ...
- java数据结构和算法------合并排序
package iYou.neugle.sort; public class Merge_sort { public static void MergeSort(double[] array, i ...
- Labview实现单边带信号调制(SSB)[移相法]
Labview实现单边带信号调制(SSB)[移相法] 时域上的表达式为 调制器模型为 这个实验中需要相位偏移比较多,因为一共用了四个信号仿真器,一个是无偏移的调制信号,一个是偏移的调制信号,一个是无偏 ...
- Function-两个日期大小比较
function checkDate(from,to){ if (from == "" || to == "") return 2; var rValue = ...
- button swift
// // ViewController.swift // UILabelTest // // Created by mac on 15/6/23. // Copyright (c) 2015年 fa ...
- JAVA类与对象(九)------多态
多态是同一个行为具有多个不同表现形式或形态的能力.多态性是对象多种表现形式的体现. 多态存在的三个必要条件: 继承 重写 父类引用指向子类对象 例:Parent p = new Child(); 当使 ...
- 【上传AppStore】iOS项目上传到AppStore步骤流程(第一章) - 上传新的app
1.登录developer.apple.com 2.点击member center后 然后如下图 3.点击certificates Identifiers 进下图 界面基本介绍请看图 : 4. 其次创 ...
- 微软职位内部推荐-Software Engineer II-News
微软近期Open的职位: News is a critical areas for integration of mobile and services, one of the top priorit ...