2015-01-30 5 views
1

로 변환 링크 + 경로를 살균하는 PHP 함수가 있습니까? 즉 URL을 (도트 포함) 상대

http://example.com/fold1/fold2/fold3/../../././MyFile.HTML 
to 
http://example.com/fold1/MyFile.HTML 

그래서 나는 점을 제거하지만, 적합 (상대) 경로를 올바르게 유지 원한다.

답변

0

나는 지금까지 발견 한 것입니다 :

echo ConvertDotedPathToNormalUrl('http://example.com/directory/.././pageee.html'); 

코드 :

function ConvertDotedPathToNormalUrl($url){ 
    $firstType = '/(.*)\/((?:(?!\.\.).)+)\/\.\.\//si'; 
    preg_match($firstType,$url,$result); 
    if (!empty($result[2])){ 
     $url = str_replace('/'.$result[2].'/..','',$url); 
     if (strstr($url,'../')){$url= ConvertDotedPathToNormalUrl($url);} 
    } 
    $url = str_replace('/./','/',$url); $url = str_replace('://','|||',$url);$url = str_replace('//','/',$url);$url = str_replace('|||','://',$url); 
    return $url; 
} 

추신 하지만 변환하지 않습니다.

0


1) parse_url (..)을 사용하여 $ 경로를 가져올 수 있습니다.
2) $ webroot = $ _SERVER [ 'DOCUMENT_ROOT']을 받으십시오.
3) $ zrealpath = realpath ($ webroot. $ path)를 얻습니다.

<?php 
    define ('CRLF', "<br />\n"); 
    $url = 'http://example.com/fold1/fold2/fold3/../../././MyFile.HTML'; 
    $parsed = parse_url($url); 
    echo '---- vardump($parsed):', CRLF; // for education 
    zvardump($parsed); 
    $webroot = $_SERVER['DOCUMENT_ROOT']; 
    echo 'webroot = ', $webroot, CRLF; 
    $path = $parsed['path']; 
    echo 'path = ', $path, CRLF; 
    $zrealpath = realpath($webroot . $path); 
    echo 'realpath = ', $zrealpath, CRLF; 

function zvardump($var1) { 
    ob_start(); 
    echo "<pre style=\"margin:0;\">\n"; 
    var_dump($var1); 
    echo "</pre>\n"; 
    $zoutput = ob_get_contents(); 
    ob_end_clean(); 
    echo str_replace("=>\n ", " => ", $zoutput); 
    } 
?> 
관련 문제