1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
  例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
2. 写一个函数,算出两个文件的相对路径
  如 $a = '/a/b/c/d/e.php';
  $b = '/a/b/12/34/c.php';
  计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上

解决方案 »

  1.   

    1.
    $url = 'http://www.sina.com.cn/abc/de/fg.php?id=1';
    $p = parse_url($url);
    echo pathinfo($p['path'], PATHINFO_EXTENSION);
      

  2.   

    <?php$path = array(
    '/etc/'
    ,'/home/wcq/var/html/wcq.html'
    );
    //该函数默认返回$b 相对 $a的路径,
    //如果设置$reverse为true;那么将返回$a相对$b的路径,
    //默认的目录分隔符号为常量DIRECTORY_SEPARATOR
    //可以通过设置$separator参数来处理不同平台上的路径(比如在linux上处理windows的路径,或反之)
    function relative_path($a , $b , $separator = DIRECTORY_SEPARATOR , $reverse = false){$sp = $separator;//处理相反的路径
    if($reverse){   return relative_path($b , $a , $sp);}//将两个路径字符串分别路径分割为两个数组
    $a = explode($sp , $a);
    $b = explode($sp , $b);$l = count($a);//如果根目录不相同则返回错误
    if($a[0] != $b[0]){   return " dir $a and $b not in the same filesystem !";}$i = 0 ;for( ; $i < $l && $a[$i] == $b[$i]; $i++);//返回相对路径
    $path = str_repeat("..$sp" , $l - $i - 1) . implode($sp , array_slice($b , $i));if(strpos($path , '..') === false){   $path = ".$sp" . $path;
    }return $path;
    }
    echo relative_path($path[0] , $path[1] , '/') , '<br>';
    ?>
      

  3.   

    2.
    $a = '/a/b/c/d/e.php';
    $b = '/a/b/12/34/c.php';
    $i = 0;
    $back = 0;
    $flag = false;
    while($b[$i++])
    {
    if($b[$i] == $a[$i] && $flag == false)
    { continue;
    }
    else
    {
    $flag  = !$flag ? true : $flag;
    $s   .= $a[$i];
    if($b[$i] == "/") $back++;
    }
    }
    echo str_repeat("../",$back).$s;
      

  4.   

    $aa = '/a/b/c/d/e.php';
    $bb = '/a/b/12/34/c.php';$a = explode("/",$aa);
    $b = explode("/",$bb);
    $return = "";
    for($i=0;$i<count($a);$i++){
    if($a[$i]==$b[$i]){}
    else{
    $return = (empty($return)) ? $a[$i] : "../".$return. "/" .$a[$i];
    }
    }
    echo $return;