Kanonischer Pfad

Erzeugt einen kanonisch absoluten Pfadnamen
Beispiel ausführen
Im PHP-Manual gibt es diverse Lösungsansätze in den Kommentaren unter der Funktion realpath(). Hier eine weitere Variante.
<?php

$test 
= array(

 
'a/../index.html',
 
'../index.html',
 
'../../index.html',
 
'a/../b/../c/d/../e/../../f/index.html',
 
'a/b/../c/d/../../../../index.html',
 
'..//./../dir4//./dir5/dir6/..//dir7/',
 
'a/b/../c/d/index.html',
 
'a/b/../../c/d/index.html',
 
'a/b/../../c/../d/index.html',
 
'../../downloads/bar/../foo/../index.html',
 
'downloads/../../../',
);

function 
canonicalPath($url)
{
    
$dirs         explode('/'$url);
    
$n             0;
    
$stack         = array();
    
$leading     '';
    
    foreach (
$dirs as $s):
    
        if (
$s == '.' || $s == ''){
            continue;
        }
        
        if (
$s == '..'){
            if (
count($stack)){
                
array_pop($stack);
            }else{
                
$leading .= '../';
            }
            continue;
        }

        
array_push($stack$s);
    endforeach;
    
    
$url $leading.join ('/'$stack);

    return 
$url;
}


foreach (
$test as $t){

    
printf ('<strong>%s</strong> =&gt; <strong>%s</strong><br>'
        
$t
        
canonicalPath($t)
    );
}

?>

Benutzte Funktionen


Hinweise zum DatenschutzImpressum © 2005-2008 S. Eickhoff