php绝对路径与相对路径之间关系的的分析


Posted in PHP onMarch 03, 2010

php中好像不能像asp那样用“/”表示根目录,代之以$_SERVER['DOCUMENT_ROOT'],其它则相同:../表示向上一层。./表示当前层。假如现在a/b/c/s.php要调用根目录下的 /bb/s2.txt,则:

$RootDir = $_SERVER['DOCUMENT_ROOT']; $fireDir = "$RootDir/bb/s2.txt";

或者:“../../../bb/s2.txt”表示向上返回到b再向上到a再向上到根目录然后到bb下。

前一阵子老是受php开发中,文件互相引入require()相对位置关系的困扰,为了彻底弄清它们的关系,笔者做了个实验。

以下是实验图:

php绝对路径与相对路径之间关系的的分析

当前项目(project2)的绝对路径是:D:\www\php_case\Coucom_make。也就是我们当前项目的根目录root.

为了能更加清楚的表述不同级别的目录文件相互的引入问题,偶大胆将引用分成三种类型即:上级对下级的引用(简称上级引用,英文译为:superior to underling。简称(stou)).

下级对上级的引用(简称下级引用,英文反之便是)

平级引用或叫同级引用(英文:paratactic)。

 
好了,我们明确了引用类型,下面我们来看不同类型引用它们有着什么样的规则。

我们先来说说上级引用:

看我们的实验图,在图中项目下分别有aa bb ee 三个同级目录和一个index.php文件,在bb下又有cc目录,cc下又有dd目录和cc.php ccc.php两个文件,同样dd下也包含一个dd.php文件。凡是上层对下层均属上级引用.

例如:index.php对于所有文件的引用:  cc .php对dd.php的引用:  ee.php对dd.php的引用:

大家仔细看一下目录结构,便会发现这三种引用虽然同属于上级引用,但它们又不完全相同,我把它分成两种情况:即在上级引用中存在两种引用情况:1.从属的上级引用(类如cc.php对dd.php,,因为这两个文件同属于cc目录)2.非从属的上级引用(类如index.php对于所有文件的引用和ee.php对dd.php的引用都属于这种情况因为它们与被引用的文件并没有一个共同的父目录,在能相对于站点根目录).

对于从属上级引用:

以下是在cc.php对dd.php的引用

require('dd/dd.php');

对于非从属上级引用:

以下是在ee.php中对cc.php的引用

require('../bb/cc/cc.php');

以上所说的是上级引用,下面我们来了解一下下级引用!同理下层对上层的引用都属于下级引用,同样分成从属与非从属两类,从属下级引用相对路径以它们的父目录为根目录,例如:

Ttt.php对bbff.php的引用就属于这种情况:require('../bb/cc/cc.php');

非从属的下级引用却是以网站的根目录为准的,例如:

ccc.php对ee.php的引用: require('../../ee/ee.php');

以上是下级引用的介绍,最后我们来看一下平级引用或者叫同级引用,其实同级引用也是分为这两种情况:从属同级引与非从属同级引用

从属同级引用很简单:即在同一个目录下的两个文件的引用

例如:在dd.php中引用ttt.php require('ttt.php');

非从属同级引用:即不在同一个目录下(没有共同的父目录,只有以网站目站为父目录的情况),但是级别是相同的两个文件的引用,例如: 在aa.php在引用ee.php   require('../ee/ee.php');

以上是三种类型不同情况下的引用,另外还有涉及到嵌套引用的问题

比如:

ff.php引用dd.php,而dd.php又引用的gf.php,这种情况,本来dd.php 引用gf.php属于下级引用中的非从属引用,写法是这样的:require('../../../ee/gf.php');而ff.php引用dd.php属于上级引用中的从属引用,写法是这样的:require('./cc/dd/dd.php'); 可是你会发现在ff.php中无法找到gf.php文件,那该如何写呢?我告诉你应该在dd.php中这样写:require('../ee/gf.php');只有这样写就正确了,为什么呢?因为在涉及到嵌套引用的时候被引用文件的相对路径要以最终的引用文件为准!

简而言之:

其实很简单的,你用你的web根目录做根目录.不管你怎么定,你文件肯定有一个全部都要包含的文件的,比如有的较global.php,有的较common.php

假如这个文件放再根目录

wwwroot/global.php

里面第一行你加个chdir(dirname(__FILE__)); //切换到global.php所在目录就是跟目录

其他文件使用

require "../../../global.php"; require "aa/aa.php"; require "bb/bb/cc.php";

这样就行了,因为你的global.php已经把路径切换到wwwroot了,你不用像很多人那么麻烦

define('ROOT_PATH',dirname(__FILE__)); require ROOT_PATH.....

chdir(dirname(__FILE__)); 的确很好使,相对位置引入这个文件其他引入文件只要以他为基准就好了。

PHP 相关文章推荐
关于PHP中的Class的几点个人看法
Oct 09 PHP
深入了解php4(2)--重访过去
Oct 09 PHP
php 远程图片保存到本地的函数类
Dec 08 PHP
PHP 抓取网页图片并且另存为的实现代码
Mar 24 PHP
PHP入门学习笔记之一
Oct 12 PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 PHP
PHP 获取文件路径(灵活应用__FILE__)
Feb 15 PHP
php解析html类库simple_html_dom(详细介绍)
Jul 05 PHP
php绘制一条弧线的方法
Jan 24 PHP
WordPress中对访客评论功能的一些优化方法
Nov 24 PHP
PHP 接入微信扫码支付总结(总结篇)
Nov 03 PHP
2017年最好用的9个php开发工具推荐(超好用)
Oct 23 PHP
PHP开发中常用的三个表单验证函数使用小结
Mar 03 #PHP
PHP 引用文件技巧
Mar 02 #PHP
php下过滤html代码的函数 提高程序安全性
Mar 02 #PHP
PHP set_time_limit(0)长连接的实现分析
Mar 02 #PHP
PHP clearstatcache()函数详解
Mar 02 #PHP
PHP strtok()函数的优点分析
Mar 02 #PHP
关于PHP5 Session生命周期介绍
Mar 02 #PHP
You might like
php环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
PHP学习之字符串比较和查找
2011/04/17 PHP
PHP数据流应用的一个简单实例
2012/09/14 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
可输入的下拉框
2006/06/19 Javascript
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
2009/08/28 Javascript
js时间日期和毫秒的相互转换
2013/02/22 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
AngularJS 2.0新特性有哪些
2016/02/18 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
[js高手之路]从原型链开始图解继承到组合继承的产生详解
2017/08/28 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
2017/09/14 Javascript
vue3.0 CLI - 2.1 -  component 组件入门教程
2018/09/14 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
分数霸榜! python助你微信跳一跳拿高分
2018/01/08 Python
Python3非对称加密算法RSA实例详解
2018/12/06 Python
python图像处理模块Pillow的学习详解
2019/10/09 Python
Python自动化完成tb喵币任务的操作方法
2019/10/30 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
python MultipartEncoder传输zip文件实例
2020/04/07 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
HTML5印章绘制电子签章图片(中文英文椭圆章、中文英文椭圆印章)
2019/06/03 HTML / CSS
草莓网官网:StrawberryNET
2019/08/21 全球购物
优秀毕业生求职推荐信范文
2013/11/21 职场文书
大学生找工作推荐信范文
2013/11/28 职场文书
医药专业应届毕业生求职信范文
2014/01/01 职场文书
《长城》教学反思
2014/02/14 职场文书
人力资源管理专业应届生求职信
2014/04/24 职场文书
六一文艺汇演主持词
2015/06/30 职场文书
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js
Android开发手册Chip监听及ChipGroup监听
2022/06/10 Java/Android