php中相对路径及绝对路径的使用

前言

最近老是看到有人踩在路径的坑上面了,感觉有一点必要来说说相对路径的一些坑,以及绝对路径的使用

问题描述

首先我们先来看一下我们这个例子的目录结构

 


以及这三个文件的内容

a.php
<?php
include './c/d.php'
b.php
<?php
define('__B', 'this is a test');
c/d.php
<?php
include '../b.php';
var_dump(__B);

在c目录下面的d.php文件引用了它的上级目录下的b.php文件
单独运行c/d.php的时候不会出问题

 


但是,如果在和b同级目录下的a.php引用c/d.php的话就会出问题了

 


它报错说的是文件不存在
思考

大概意思就是a.php把c/d.php引入到a.php中后,include '../b.php'这个路径就是相对于a.php来说的了,然后对于a.php来说的这个相对路径它是不存在的,所以就出现了这个问题
如果一个文件可能在多个地方被引用的时候使用相对路径就相当容易出问题,然后我们使用绝对路径能够轻松解决这个问题。

使用绝对路径解决问题

如果我们把文件改成如下内容

a.php
<?php
include __DIR__.'/../b.php';
var_dump(__B);
b.php
<?php
define('__B', 'this is a test');
c/d.php
<?php
include __DIR__.'/../b.php';
var_dump(__B);

这样就改成了对文件的绝对路径进行引用了,__DIR__是php5.3开始中就有的预定义的魔术常量,表示这个文件所在的目录,然后我们利用这个来可以写出绝对路径,在运行a.php和c/d.php的时候都能够正常执行了,如果在php5.3之前都是使用dirname(__FILE__)来替代__DIR___

时间: 2024-12-11 04:58:31

php中相对路径及绝对路径的使用的相关文章

JSP、Servlet中的相对路径和绝对路径

js|servlet JSP.Servlet中的相对路径和绝对路径 JSP和Servlet中的绝对路径和相对路径问题困扰了我好几天,经过努力之后将其部分心得和大家共享. 前提:假设你的Http地址为http://192.168.0.1/你的web应用为webapp,那么你的web应用URL为http://192.168.0.1/webapp/ web应用的目录结构: webapp/ web-inf/ classes/ lib/ web.xml <servlet-mapping> <ser

编码-django取出pymongo中存储的中文图片路径后,读取该路径在网页上展示没有出现图片

问题描述 django取出pymongo中存储的中文图片路径后,读取该路径在网页上展示没有出现图片 问题是这样的: 我搭建的环境是:python2.7 + mongoengine + pymongo + django + Ubuntu14 python处理一些带有中文路径的图片,把这个路径存储在数据库pymongo中,保存的时候该路径是转换为:utf-8类型存储到数据库中,然后django通过mongoengine来连接pymongo的数据库,从中取出这个图片的路径, 希望向各位朋友们请教一下下

asp.net MVC 中的过滤器 ,一个路径设置对应一个过滤器类的对象吗

问题描述 asp.net MVC 中的过滤器 ,一个路径设置对应一个过滤器类的对象吗 asp.net MVC 中的过滤器 ,一个路径设置对应一个过滤器类的对象吗 .还是多个路由对应一个过滤器对象.有没有大神给讲解下路由和过滤器的对应关系代码如下:控制器代码: [CustAuthorize(""list"")] [Route(""list"")] public ActionResult List() { return View(

数据库-android 从SQLLite中获取到的图片路径,用Bitmap 加载不出来

问题描述 android 从SQLLite中获取到的图片路径,用Bitmap 加载不出来 android 从SQLLite中获取到的图片路径,用Bitmap 加载不出来,但是从本地文件中获取到的路径可以正常加载显示 下面是这两种方式的主要代码 //从数据库获取路径并加载 for (DiagHistory diagHistory : diagLists) { String path = diagHistory.getHistoryPic(); Bitmap bitmap =BitmapFactor

sae中使用directory-使用sae中遇到的关于directory路径的问题

问题描述 使用sae中遇到的关于directory路径的问题 我在sae上开发的时候采用了有关lucene的内容,其中lucene需要生成索引,我把索引文件已经放到了sae提供的storage中.我用sae自带的com.sina.sae.storage.SaeStorage; 和com.sina.sae.util.SaeUserInfo;包操作的时候,都能在SAE的storage中取到我想要找的文件(路径获取方法是:saeStorage.getUrl,能取到文件并读出文件),但是当我采用Dire

java中怎么不输入文件绝对路径就可以找到并读写该文件

问题描述 java中怎么不输入文件绝对路径就可以找到并读写该文件 怎么才可以不用输入绝对路径就可以找到相关文件进行操作,有一个网友提供一个思路是通过this.getClass().getResource("/").getPath()来获取当前物理路径然后再根据次路径拼接合成需要的物理地址,请各位路过的朋友指导一下 解决方案 java 读写绝对路径的properties文件 解决方案二: http://zhidao.baidu.com/link?url=UN-5bDu4cTbZUEFD7

java web-Java web中相对路径和绝对路径。

问题描述 Java web中相对路径和绝对路径. 有点知识混淆了.再来问问,以往的认识是如从盘符开始d:/text.txt,这样的路径才是绝对路径.学习web这一部分时,经常看到说 路径 以""/""的 开始的就是web应用的绝对路径.所以我的认为是 ,相对当前目录的路径才是相对路径.今天学习又看到说,以""/"" 开始,是相对根目录的绝对路径.倒也是相对路径.有点乱七八糟了,求梳理.现在我的认为.在web应用里不以"

ThinkPHP中公共函数路径和配置项路径的映射分析_php技巧

本文实例分析了ThinkPHP中公共函数路径和配置项路径的映射.分享给大家供大家参考.具体分析如下: ThinkPHP中在使用公共函数时(单一入口文件对应独立的项目),在Common文件夹中可以写公共的函数文件,写成文件名为common.php的文件会被系统自动加载,如果写成其他的函数名,则不会自动加载,但是有两种处理机制 1.在使用的时候手动加载 load('@.function');这样就会手动加载这个文件.@代表是在这个项目下的Common文件夹下的. 2.在配置文件中配置 复制代码 代码

简单掌握Python中glob模块查找文件路径的用法_python

glob使用UNIX shell规则查找与一个模式匹配的文件名.只要程序需要查找文件系统中名字与某个模式匹配的一组文件,就可以使用这个模块. glob的模式规则与re模块使用的正则表达式不相同.glob模式遵循标准UNIX路径扩展规则.只是用几个特殊字符来实现两个不同的通配符和字符区间.模式规则要应用于文件名中的段.模式中的路径可以是相对路径或绝对路径. shell变量名和波浪线都不会扩展. 基本用法 1.glob.glob(pathname), 返回所有匹配的文件路径列表.它只有一个参数pat

html网页-如何在HTML文件中通过javascript获得当前网页的绝对路径和相对路径

问题描述 如何在HTML文件中通过javascript获得当前网页的绝对路径和相对路径 各位大神,我希望在html文件,(注意:不是jsp文件或asp文件)中通过javascript获得当前网页的地址(磁盘地址).换句话说,比如我正在打开的网页文件是index.htm,该网页文件放在了d:webconfightml路径下,我如何在index.htm文件中获得它自己的磁盘路径?即:如何获得路径"d:webconfightml"? 注意:不能有服务器端的支持,也就是我的网页不是运行在服务器