原创

关于"绝对路径"和"相对路径"

温馨提示:
本文最后更新于 2018年11月30日,已超过 1,968 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

作为一个phper,一开始学习的时候,可能都接触过绝对路径和相对路径,但是也可能很多没学基础的人,直接撸tp去了,根本不了解路径,一遇到问题就两眼一抹黑瞎几把问,所以,今天就来讲讲关于路径的事吧.

绝对路径

绝对路径是指从根目录开始的路径,根目录的定义根据环境的不同而不同
在windows中,根目录以盘符开始,例如:"E:\tioncico\www\es_demo1.php"

在linux中,根目录直接是系统的根目录,例如:"/www/work/es_demo1/index.php"

在url域名中,根目录由网址开始,例如:"www.php20.cn/admin/index.php"

如以上这种情况,直接从根目录开始的路径,就是绝对路径.

仙士可博客

仙士可博客

仙士可博客

绝对路径除了从根目录开始的写法,还可以直接通过'/'字符串开头,可直接代表根目录,同样,根目录根据环境的不同而不同

例如:"/work/www/es_demo/index.php".

在windows中,代表着"盘符:\work\www\es_demo\index.php";(windows目录分隔符是)

在linux环境中,代表着"/work/www/es_demo/index.php".

在url域名中,代表着:"域名/work/www/es_demo/index.php".

例如:

<?php
echo getcwd();

在windows中:

仙士可博客

在linux中:

仙士可博客

如上就是绝对路径的说明以及2种写法

相对路径

相对路径是指从当前路径开始计算的路径,它的写法是用"./"代表当前目录,然后进行计算目录

例如,当前位置是"/www/work/es_demo1/index.php"

例如以下目录结构:

仙士可博客

在index.php中,调用test.txt,和test2.txt的写法如下:

<?php
echo "所在目录:".getcwd()."<br>";
$testTxtAbsolute1 = '/tioncico/othe/a.cn/test.txt';//绝对路径写法
$testTxtAbsolute2 = 'E:/tioncico/othe/a.cn/test.txt';//绝对路径写法
$testTxtRelative = './test.txt';//相对路径写法
echo file_get_contents($testTxtAbsolute1),"<br>";
echo file_get_contents($testTxtAbsolute2),"<br>";
echo file_get_contents($testTxtRelative),"<br>";

$test2TxtAbsolute1 = '/tioncico/othe/a.cn/test2/test2.txt';//绝对路径写法
$test2TxtAbsolute2 = 'E:/tioncico/othe/a.cn/test2/test2.txt';//绝对路径写法
$test2TxtRelative = './test2/test2.txt';//相对路径写法
echo file_get_contents($test2TxtAbsolute1),"<br>";
echo file_get_contents($test2TxtAbsolute2),"<br>";
echo file_get_contents($test2TxtRelative),"<br>";

同样,我们可以使用"../"来表示上级目录

在test3.php中,使用"../"来调用test.txt和test2.txt写法如下:

<?php
echo "所在目录:".getcwd()."<br>";
$testTxtRelative = '../test.txt';//相对路径写法
echo file_get_contents($testTxtRelative),"<br>";

$test2TxtRelative = '../test2/test2.txt';//相对路径写法
echo file_get_contents($test2TxtRelative),"<br>";

我们还可以用"../../"来表示父级的父级,这里不多做说明

路径的混淆

很多人搞不清楚根据环境下,路径的问题,我根据平时的经验,将phper能遇上的路径环境都区分了出来,具体可分为:

  • 服务器绝对路径,运行着php服务的环境,一般是windows或者linux,该路径能获取到服务器环境的文件信息,只能通过服务端自身(例如运行的php代码,shell命令等)调用

  • 服务器相对路径,运行着php服务的环境,一般是windows或者linux,该路径能获取到服务器环境的文件信息,只能通过服务端自身(例如运行的php代码,shell命令等)调用

  • url绝对路径,在浏览器地址栏或者在html代码中显示,url属于http协议,需要跟服务端交互,才能正确的获取文件信息,浏览器通过url绝对路径,可获取到http服务器绑定目录的文件信息

  • url相对路径,在html代码中显示,可通过相对路径获取到该网页和http服务器绑定目录下的文件信息

  • 用户绝对路径,在浏览器地址栏和标签中,都可通过本地绝对路径去获取本机的文件,例如在浏览器输入:"E:\tioncico\othe\a.cn\test.txt",即可获取到本机E磁盘下的这个文件

  • 用户相对路径,同样,在浏览器中,如果你直接通过"E:\tioncico\othe\a.cn\index.html"打开一个html,里面html标签如果写了绝对路径,也可通过该相对路径,获取到本机磁盘下的相对路径文件

其他

关于php下的绝对路径问题,如果index.php调用test.php,在test.php获取路径,以及操作相对路径,那这个路径是以index.php为准还是以test.php为准呢?我们新建一个以下的目录结构:

仙士可博客

在index.php引入test.php:

<?php
/**
 * Created by PhpStorm.
 * User: Apple
 * Date: 2018/11/30 0030
 * Time: 11:46
 */
include "./test/test2/test.php";

在test.php调用test.txt以及输出目录:

<?php
/**
 * Created by PhpStorm.
 * User: Apple
 * Date: 2018/11/30 0030
 * Time: 11:47
 */
echo "你的路径是:".getcwd()."<br>";
echo  file_get_contents("../../test.txt");
echo  file_get_contents("./test.txt");

调用index.php 输出结果:

仙士可博客

很明显,路径是以调用的文件为基准的.那该如何获取到test.php的目录呢?

可通过__DIR__常量获取当前文件目录

正文到此结束
本文目录