php专区

 首页 > php专区 > PHP高级 > 缓存异常处理 > PHP中查找文件的相对路径也许绝对路径的工具

PHP中查找文件的相对路径也许绝对路径的工具

分享到:
【字体:
导读:
         摘要:PHP中查找文件的相对路径或者绝对路径的工具以前面试题目中有一题为求两个文件的相对路径,当时觉得没有电脑,书写代码太麻烦,没有做那个题目,今日工作比较闲遐,就想起这事来,完成了两个函数,代码未经过实际生产环境考验,如引用至生产环境,还请慎重阅读,主要是参考学习 查看源代码打印帮助 1 <?...

PHP中查找文件的相对路径也许绝对路径的工具
PHP中查找文件的相对路径或者绝对路径的工具
以前面试题目中有一题为求两个文件的相对路径,当时觉得没有电脑,书写代码太麻烦,没有做那个题目,今日工作比较闲遐,就想起这事来,完成了两个函数,代码未经过实际生产环境考验,如引用至生产环境,还请慎重阅读,主要是参考学习
查看源代码打印帮助
1

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
}

本文出自 “清源教育” 博客,转载请注明此处,谢谢!
PHP中查找文件的相对路径也许绝对路径的工具
分享到:
curl模拟登陆有关问题
curl模拟登陆有关问题 curl模拟登陆问题本帖最后由 zkg510168343 于 2013-10-22 15:29:21 编辑 登陆的完成后,我打印的时候发现是登陆成功了的,显示正在跳转页面,可是再次请求首页还是未登录状态,别的页面也是没有登陆,请问这是什么问题,怎样调试 在cookie临时文件里 生成了一个 coo810B.tmp文件 值为...
PHP扩充模块解包(由term_to_binary生成...
PHP扩充模块解包(由term_to_binary生成的)Erlang ext term格式的二进制数据 PHP扩展模块解包(由term_to_binary生成的)Erlang ext term格式的二进制数据1、引言 《初探Erlang的term_to_binary数据封包机制》一文中已经介绍了Erlang扩展term格式(Erlang external term format)binary的作用, 有些同学想把Erlang数据通过...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……