로 변환 링크 + 경로를 살균하는 PHP 함수가 있습니까? 즉 URL을 (도트 포함) 상대
http://example.com/fold1/fold2/fold3/../../././MyFile.HTML
to
http://example.com/fold1/MyFile.HTML
그래서 나는 점을 제거하지만, 적합 (상대) 경로를 올바르게 유지 원한다.
로 변환 링크 + 경로를 살균하는 PHP 함수가 있습니까? 즉 URL을 (도트 포함) 상대
http://example.com/fold1/fold2/fold3/../../././MyFile.HTML
to
http://example.com/fold1/MyFile.HTML
그래서 나는 점을 제거하지만, 적합 (상대) 경로를 올바르게 유지 원한다.
나는 지금까지 발견 한 것입니다 :
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;
}
추신 하지만 변환하지 않습니다.
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);
}
?>