以下简单分享了在php代码中,使用php内置函数对文件路径进行一些简单的分析以及处理的几种常见方法.
1、文件的当前绝对路径
在php中有着几个魔术魔术常量,__LINE__php文件中当前行的行号, __FUNCTION__ 函数名称,__CLASS__ 类的名称,__METHOD__类的方法,这里我们主要用到了__FILE__ ,它可以完整获得当前文件的到系统根目录的绝对路径与文件名,如果用在了include等包含的函数文件中,那么返回被包含的文件名.
<?php
echo __FILE__;
?>
结果为:D:\www\当前文件.php
如果只需要当前的绝对路径不需要获得文件名称呢?
<?php
echo dirname(__FILE__);
echo __DIR__;
?>
D:\www\
D:\www
dirname()函数,它可以返回指定路径中的目录部分.其功能等价于__DIR__,区别在于dirname结尾目录有\,而魔术常量__DIR__除非是根目录,否则结尾没有斜杠结尾.
我们也可以将dirname函数用法扩展叠加一下,将每层的下一层目录当作文件来处理,就可以获得当前php文件的上一层目录的绝对地址.
2、相对路径
假设
<?php
$lujin1 = '/www/dd/b/c/e.php';
$lujin2 = '/www/dd/11/35/d.php';
$lujin1=explode('/',$lujin1);
$lujin2=explode('/',$lujin2);
$lujin1_2=array_values(array_diff($lujin1,$lujin2));
$lujin2_1=array_values(array_diff($lujin2,$lujin1));
array_pop($lujin1_2);
foreach($lujin1_2 as &$v){
$v='..';
}
$lujinarr=array_merge($lujin1_2,$lujin2_1);
$xiangdui=implode("/",$lujinarr);
echo $lujin2."相对于".$lujin1."的相对路径为:".$xiangdui;
//或者
$count=0;
//得到相同路径部分个数
$newsz=min(count($lujin1),count($lujin2));
//去除相同部分
for ($i=0;$i<$newsz;$i++){
if ($lujin1[$i]==$lujin2[$i]){
unset($lujin1[$i]);
$count++;
}
else{
break;
}
}
echo str_repeat("../", $count).implode("/", $lujin1);
//将相同部分用"../代替"并重新组合成相对路径
?>
通过路径explode将路径1与路径2拆分为数组,然后array_diff返回两个路径对比的差值,在将其转为新的数组合并,最后将数组转为字符串即可.
3、获取文件名称
绝对地址获得当前文件的文件名称
带后缀的文件名:basename(__FILE__)
不带后缀的文件名:basename(__FILE__,".php")
$dizhi = 'C:\abc\\www\\\Z\1.php';
$dizhi = str_replace('\\', '/', $dizhi);
if (substr($dizhi, -1) != '/') {
$dizhi = $dizhi . '/';
}
然后相对地址与绝对地址都可以使用下列方法:
1、basename函数
basename($dizhi);
2、先查找"/"最后一次出现位置再用substr字符串截取,查找替换文字即可得到文件名
$dizhi = trim($dizhi, '/');
echo substr($dizhi, strripos($dizhi, '/') + 1);
3、与第二种类似,只不过这里用了dirname函数返回路径中目录部分,然后再计算目录部分字符长度后substr截取出剩下部分就是文件名称
echo substr($dizhi, strlen(dirname($dizhi)) + 1);
4、将路径转为数组后,再通过array_pop删除最后一个数组且输出提示.
$dizhiarr = explode('/',$dizhi);
echo array_pop($dizhiarr);
5、pathinfo函数可以查看指定文件的基础信息.如dirname目录名称、basename文件名称、extension文件后缀等等.
$dizhiinfo = pathinfo($dizhi);
echo $dizhiinfo['basename'];
以上就是在php中获取或查看相对路径与绝对路径、文件名称的一些小方法.