分享

php中相对路径和绝对路径如何使用(详解)

 醉人说梦 2022-05-23 发布于广东

1、总结

一句话总结:

一、php中好像不能像asp那样用“/”表示根目录,代之以$_SERVER['DOCUMENT_ROOT'],其它则相同:../表示向上一层。./表示当前层。javascript

二、dirname('__FILE__')和$_SERVER['DOCUMENT_ROOT']是表示根目录,这个根目录是绝对路径,可是会随着你的项目移动而变化,因此能够多用。这种绝对路径D:\software\code\phpStudy2018\PHPTutorial\WWW\github\phpTest能够少用一点。php

一、php中用用“/”表示根目录么?

解答:不是,php中以$_SERVER['DOCUMENT_ROOT']表示跟目录。html

二、什么符号表示当前目录(asp,jsp,php都同样)?

解答:点加正斜杆,./表示当前层。java

三、php中如何使用$_SERVER['DOCUMENT_ROOT']作为根目录访问其它文件?

解答:$RootDir = $_SERVER['DOCUMENT_ROOT'];  $fireDir = "$RootDir/bb/s2.txt"; 。git

四、php中用$_SERVER['DOCUMENT_ROOT']作为根目录的话那么是相对路径仍是绝对路径?

解答:绝对路径。 echo $_SERVER['DOCUMENT_ROOT'];。D:\software\code\phpStudy2018\PHPTutorial\WWW\github\phpTest。github

五、php中的$_SERVER是什么变量?

解答:超全局变量。web

六、php中的超全局变量怎么写?

解答:$符号(变量符号)加下划线加变量名的大写。$_SERVER。浏览器

七、php中的文件引用分为哪四种?

解答:上级引用,下级引用,同级引用和嵌套引用。服务器

八、php中的每种文件引用又分为哪两种?

解答:从属引用和非从属引用。网络

九、php文件引用方式中的从属引用是什么意思?

解答:在同一个目录下的引用。

十、php文件引用方式中的非从属引用是什么意思?

解答:即不在同一个目录下(没有共同的父目录,只有以网站目站为父目录的状况)。

十一、dirname(__FILE__)的值和$_SERVER['DOCUMENT_ROOT']的值同样么?都表示什么?

解答:同样,都表示为网站根目录。

十二、php中的chdir(dirname(__FILE__)); 是什么意思?

解答:切换当前目录到根目录。

1三、php中表示根目录的方法是什么(两种)?

解答:dirname(__FILE__)的值和$_SERVER['DOCUMENT_ROOT']。

1四、假设info.html路径是:c:/Inetpub/wwwroot/sites/blabla/info.html;假设index.html路径是:c:/Inetpub/wwwroot/index.html;在info.html加入index.html超连接的代码怎么写?

解答:<a href = "../../index.html">index.html</a>。

1五、绝对路径是什么意思?

解答:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:/xyz/test.txt 表明了test.txt文件的绝对路径。。

1六、相对路径是什么意思?

解答:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录)。

1七、在Servlet中,"/"表明Web应用的跟目录么?

解答:对的。

1八、同级怎么访问?

解答:由于同级表示的是在同一个dir下,能够直接abc.txt来访问

1九、全部的文件路径是以dir作参照而不是文件作参照,这句话对么?

解答:对的。

2、php绝对路径与相对路径之间关系的的深刻研究

一、简述

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下。

如下是实验图:

当前项目(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__)); 的确很好使,相对位置引入这个文件其余引入文件只要以他为基准就行了。

3、HTML相对路径--上级目录及下级目录的写法

一、如何表示上级目录

../表示源文件所在目录的上一级目录../../表示源文件所在目录的上上级目录,以此类推。

假设info.html路径是:c:/Inetpub/wwwroot/sites/blabla/info.html
假设index.html路径是:c:/Inetpub/wwwroot/sites/index.html
在info.html加入index.html超连接的代码应该这样写:

<a href = "../index.html">index.html</a>

假设info.html路径是:c:/Inetpub/wwwroot/sites/blabla/info.html
假设index.html路径是:c:/Inetpub/wwwroot/index.html
在info.html加入index.html超连接的代码应该这样写:

<a href = "../../index.html">index.html</a>

假设info.html路径是:c:/Inetpub/wwwroot/sites/blabla/info.html
假设index.html路径是:c:/Inetpub/wwwroot/sites/wowstory/index.html
在info.html加入index.html超连接的代码应该这样写:

<a href = "../wowstory/index.html">index.html</a>
 
 
 
  
 

二、如何表示下级目录

引用下级目录的文件,直接写下级目录文件的路径便可。

假设info.html路径是:c:/Inetpub/wwwroot/sites/blabla/info.html
假设index.html路径是:c:/Inetpub/wwwroot/sites/blabla/html/index.html
在info.html加入index.html超连接的代码应该这样写:

<a href = "html/index.html">index.html</a>

假设info.html路径是:c:/Inetpub/wwwroot/sites/blabla/info.html
假设index.html路径是:c:/Inetpub/wwwroot/sites/blabla/html/tutorials/index.html
在info.html加入index.html超连接的代码应该这样写:

<a href = "html/tutorials/index.html">index.html</a>

4、java(Web)中相对路径,绝对路径问题总结

前言:


 前一段时间,因为在处理Web应用下的文件建立与移动等,所以涉及到不少关于java
中相对路径,绝对路径等问题。同时,对于Web应用中的相对路径,绝对路径,以及Java.io.File
类学习了一下。也找了一些资料。但愿你们遇到相似的问题,能够更有效的解决。

1.基本概念的理解

  绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:
C:/xyz/test.txt 表明了test.txt文件的绝对路径。http://www./index.htm也表明了一个
URL绝对路径。

  相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在
Servlet中,"/"表明Web应用的跟目录。和物理路径的相对表示。例如:"./" 表明当前目录,
"../"表明上级目录。这种相似的表示,也是属于相对路径。

另外关于URI,URL,URN等内容,请参考RFC相关文档标准。

RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax, 
(http://www./rfc/rfc2396.txt)

2.关于JSP/Servlet中的相对路径和绝对路径。

2.1服务器端的地址

   服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的
(不一样于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候
在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://192.168.0.1/webapp/的。

  其用到的地方有: 
 forward:servlet中的request.getRequestDispatcher(address);这个address是
在服务器端解析的,因此,你要forward到a.jsp应该这么写:
request.getRequestDispatcher(“/user/a.jsp”)这个/相对于当前的web应用webapp,
其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp。 
sendRedirect:在jsp中<%response.sendRedirect("/rtccp/user/a.jsp");%>

2.二、客户端的地址  


       全部的html页面中的相对地址都是相对于服务器根目录(http://192.168.0.1/)的,
而不是(跟目录下的该Web应用的目录)http://192.168.0.1/webapp/的。 
 Html中的form表单的action属性的地址应该是相对于服务器根目录(http://192.168.0.1/)的,
因此,若是提交到a.jsp为:action="/webapp/user/a.jsp"或action="<%=request.getContextPath()%>"/user/a.jsp;
  提交到servlet为actiom="/webapp/handleservlet"  
   Javascript也是在客户端解析的,因此其相对路径和form表单同样。 
 

  所以,通常状况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上
<%=request.getContextPath()%>,以确保所引用的文件都属于Web应用中的目录。
另外,应该尽可能避免使用相似".","./","../../"等相似的相对该文件位置的相对路径,这样
当文件移动时,很容易出问题

3. JSP/Servlet中得到当前应用的相对路径和绝对路径


3.1 JSP中得到当前应用的相对路径和绝对路径


 根目录所对应的绝对路径:request.getRequestURI()
 文件的绝对路径     :application.getRealPath(request.getRequestURI());
 当前web应用的绝对路径 :application.getRealPath("/");
 取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent()

3.2 Servlet中得到当前应用的相对路径和绝对路径


 根目录所对应的绝对路径:request.getServletPath();
 文件的绝对路径    :request.getSession().getServletContext().getRealPath
(request.getRequestURI())   
 当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/");
     (ServletContext对象得到几种方式:
       javax.servlet.http.HttpSession.getServletContext() 
       javax.servlet.jsp.PageContext.getServletContext() 
       javax.servlet.ServletConfig.getServletContext() 
     )

4.java 的Class中得到相对路径,绝对路径的方法


4.1单独的Java类中得到绝对路径


  根据java.io.File的Doc文挡,可知:
 默认状况下new File("/")表明的目录为:System.getProperty("user.dir")。
 一下程序得到执行类的当前路径
package org.cheng.file;
import java.io.File;

public class FileTest {
    public static void main(String[] args) throws Exception {      

  System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));    

  System.out.println(FileTest.class.getClassLoader().getResource(""));       

  System.out.println(ClassLoader.getSystemResource(""));        
  System.out.println(FileTest.class.getResource(""));        
  System.out.println(FileTest.class.getResource("/")); //Class文件所在路径  
  System.out.println(new File("/").getAbsolutePath());        
  System.out.println(System.getProperty("user.dir"));    
 }
}

4.2服务器中的Java类得到当前路径(来自网络)


(1).Weblogic

WebApplication的系统文件根目录是你的weblogic安装所在根目录。
例如:若是你的weblogic安装在c:/bea/weblogic700.....
那么,你的文件根路径就是c:/.
因此,有两种方式可以让你访问你的服务器端的文件:
a.使用绝对路径:
好比将你的参数文件放在c:/yourconfig/yourconf.properties,
直接使用 new FileInputStream("yourconfig/yourconf.properties");
b.使用相对路径:
相对路径的根目录就是你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放

在yourwebapp/yourconfig/yourconf.properties,
这样使用:
new FileInputStream("./yourconfig/yourconf.properties");
这两种方式都可,本身选择。

(2).Tomcat

在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin

(3).Resin

不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET
的路径为根.好比用新建文件法测试File f = new File("a.htm");
这个a.htm在resin的安装目录下

(4).如何读相对路径哪?

在Java文件中getResource或getResourceAsStream都可

例:getClass().getResourceAsStream(filePath);//filePath能够是"/filename",这里的/表明web

发布根路径下WEB-INF/classes

默认使用该方法的路径是:WEB-INF/classes。已经在Tomcat中测试。

5.读取文件时的相对路径,避免硬编码和绝对路径的使用。(来自网络)


5.1 采用Spring的DI机制得到文件,避免硬编码。
   参考下面的链接内容:
   http://www./viewtopic.php?p=90213&
5.2 配置文件的读取
 参考下面的链接内容:
 http://dev.csdn.net/develop/article/39/39681.shtm
5.3 经过虚拟路径或相对路径读取一个xml文件,避免硬编码
 参考下面的链接内容:
 http://club./club/clubPage.jsp?iPage=1&tID=10708&ccID=8
 


6.Java中文件的经常使用操做(复制,移动,删除,建立等)(来自网络)


 经常使用 java File 操做类 
 http://www./014/200604022353065155.htm
 
 Java文件操做大全(JSP中)
 http://www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html

 java文件操做详解(Java中文网)
 http://www.51cto.com/html/2005/1108/10947.htm

 JAVA 如何建立/删除/修改/复制目录及文件
 http://www./developer/java/2005/2/264.html

总结:


 经过上面内容的使用,能够解决在Web应用服务器端,移动文件,查找文件,复制
 删除文件等操做,同时对服务器的相对地址,绝对地址概念更加清晰。
建议参考URI,的RFC标准文挡。同时对Java.io.File. Java.net.URI.等内容了解透彻
对其余方面的理解能够更加深刻和透彻。
==================================================================================

参考资料:
java/docs/

java.io.File
java.io.InputStream
java.io.OutputStream
java.io.FileInputStream
java.io.FileReader;
java.io.FileOutputStream
java.io.FileWriter;
java.net.URI
java.net.URL

绝对路径与相对路径祥解
http://www./htmldata/2005-02-26/1109430310.html

[『J道习练』]JSP和Servlet中的绝对路径和相对路径
http:///blog/more.asp?name=pcthomas&id=9122&commentid=12376

JSP,Servlet,Class得到当前应用的相对路径和绝对路径
http://cy./cy/club/clubPage.jsp?ccStyle=0&tID=886&ccID=77

如何得到当前文件路径
http://www./resource/article/44/44113_java.html

经过Spring注入机制,取得文件
http://www./viewtopic.php?p=90213&

配置文件的读取 
http://dev.csdn.net/develop/article/39/39681.shtm

读取配置文件,经过虚拟路径或相对路径读取一个xml文件,避免硬编码! 
http://club./club/clubPage.jsp?iPage=1&tID=10708&ccID=8

经常使用 java File 操做类
http://www./014/200604022353065155.htm

Java文件操做大全
http://www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html

Java文件操做详解
http://www.51cto.com/html/2005/1108/10947.htm

5、测试题-简答题

一、php中用用“/”表示根目录么?

解答:不是,php中以$_SERVER['DOCUMENT_ROOT']表示跟目录。

二、什么符号表示当前目录(asp,jsp,php都同样)?

解答:点加正斜杆,./表示当前层。

三、php中如何使用$_SERVER['DOCUMENT_ROOT']作为根目录访问其它文件?

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

四、php中用$_SERVER['DOCUMENT_ROOT']作为根目录的话那么是相对路径仍是绝对路径?

解答:绝对路径。 echo $_SERVER['DOCUMENT_ROOT'];。D:\software\code\phpStudy2018\PHPTutorial\WWW\github\phpTest。

五、php中的$_SERVER是什么变量?

解答:超全局变量。

六、php中的超全局变量怎么写?

解答:$符号(变量符号)加下划线加变量名的大写。$_SERVER。

七、php中的文件引用分为哪四种?

解答:上级引用,下级引用,同级引用和嵌套引用。

八、php中的每种文件引用又分为哪两种?

解答:从属引用和非从属引用。

九、php文件引用方式中的从属引用是什么意思?

解答:在同一个目录下的引用。

十、php文件引用方式中的非从属引用是什么意思?

解答:即不在同一个目录下(没有共同的父目录,只有以网站目站为父目录的状况)。

十一、dirname(__FILE__)的值和$_SERVER['DOCUMENT_ROOT']的值同样么?都表示什么?

解答:同样,都表示为网站根目录。

十二、php中的chdir(dirname(__FILE__)); 是什么意思?

解答:切换当前目录到根目录。

1三、php中表示根目录的方法是什么(两种)?

解答:dirname(__FILE__)的值和$_SERVER['DOCUMENT_ROOT']

1四、假设info.html路径是:c:/Inetpub/wwwroot/sites/blabla/info.html;假设index.html路径是:c:/Inetpub/wwwroot/index.html;在info.html加入index.html超连接的代码怎么写?

解答:<a href = "../../index.html">index.html</a>。

1五、绝对路径是什么意思?

解答:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:/xyz/test.txt 表明了test.txt文件的绝对路径。。

1六、相对路径是什么意思?

解答:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录)。

1七、在Servlet中,"/"表明Web应用的跟目录么?

解答:对的。

1八、同级怎么访问?

解答:由于同级表示的是在同一个dir下,能够直接abc.txt来访问

1九、全部的文件路径是以dir作参照而不是文件作参照,这句话对么?

解答:对的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多