欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP中查找文件的相对路径或者绝对路径的工具

程序员文章站 2023-01-30 09:16:43
以前面试题目中有一题为求两个文件的相对路径,当时觉得没有电脑,书写代码太麻烦,没有做那个题目,今日工作比较闲遐,就想起这事来,完成了两个函数,代码未经过实际生产环境考验,如引用至生产环境,还请慎重,...
以前面试题目中有一题为求两个文件的相对路径,当时觉得没有电脑,书写代码太麻烦,没有做那个题目,今日工作比较闲遐,就想起这事来,完成了两个函数,代码未经过实际生产环境考验,如引用至生产环境,还请慎重,主要是参考学习

查看源代码打印帮助

 

1  
<?php  
2  
/** 
3 
 * 文件的相对路径或者绝对路径查找工具 
4 
 * 
5 
 * @author 清源教育<support@tsingyuan.cn > 
6 
 * @version $id:v 1.0 ,2013/10/13 17:29:00 
7 
 * @copyright (c) copyright;tsingyuan,2013 
8 
 */  
9  
   
10  
/** 
11 
 * 返回文件的绝对路径 
12 
 * 
13 
 * @param string $filename 
14 
 * @return string 
15 
 */  
16  
function absoluteroute($filename)  
17  
{  
18  
    $split = '/\/|\\\/';  
19  
    $currentdir = preg_split($split, dirname(__file__));  
20  
    $dirarr = preg_split($split, $filename);  
21  
    $diracount = count($dirarr);  
22  
    $cda = count($currentdir);  
23  
    if(strpos(php_os, 'win') !== false)  
24  
        $reg = '/\w\:/';  
25  
    else  
26  
        $reg = '/\//';  
27  
    if(!preg_match($reg, $dirarr[0]))  
28  
    {  
29  
        foreach($dirarr as $nk=>$name)  
30  
        {  
31  
            if($name == "." || $name == '..')  
32  
            {  
33  
                if($name == '..')  
34  
                    $filenamearr = array_slice($currentdir, 0, -($nk+1));  
35  
                if($name == '.' && $nk == '0')  
36  
                    $filenamearr = array_slice($currentdir, 0);  
37  
            }  
38  
            else  
39  
            {  
40  
                $filenamearr[] = $name;  
41  
            }  
42  
        }  
43  
        $filename = implode('/', $filenamearr);  
44  
    }  
45  
    return $filename;  
46  
}  
47  
   
48  
/** 
49 
 * 返回两个文件的相对路径 (ps:^_^不错的php学习交流群:276167802,验证:csl,有兴趣的话可以加入进来一起讨论) 
50 
 * (为了保证输入的相对路径参数可用,故此函数依赖absoluteroute) 
51 
 * 
52 
 * @param string $filenamea 
53 
 * @param string $filenameb 
54 
 * @return string 
55 
 */  
56  
function relativeroute($filenamea, $filenameb)  
57  
{  
58  
    $split = '/\/|\\\/';  
59  
    $filenamea = absoluteroute($filenamea);  
60  
    $filenameb = absoluteroute($filenameb);  
61  
    $dira =preg_split($split, $filenamea);  
62  
    $dirb =preg_split($split, $filenameb);  
63  
    $flag = true;  
64  
    if(count($dira) >= count($dirb))  
65  
    {  
66  
        $tmp = array();  
67  
        $tmp = $dira;  
68  
        $dira = $dirb;  
69  
        $dirb = $tmp;  
70  
        $flag = false;  
71  
    }  
72  
    foreach($dira as $k=>$v)  
73  
        if($v != $dirb[$k])break;  
74  
   
75  
    $dirr = array_slice($dirb, $k);  
76  
   
77  
    $k == 1 ? $dtag  = '/' :  $dtag  = './';  
78  
    $result = $dtag.implode('/', $dirr);  
79  
    if(!$flag)  
80  
    {  
81  
        if($dira[0] == '')array_shift($dira);  
82  
        foreach($dirr as $kk=>&$v)  
83  
            ($kk+1) != count($dirr)?  
84  
                ($v ?  
85  
                    $v = '..' :  
86  
                    $v = '.'  
87  
                ) :  
88  
                $v = implode('/', array_slice($dira, $k)) ;  
89  
        $result = $dtag.implode('/', $dirr);  
90  
    }  
91  
    return $result;  
92  
}