Mailinglisten-Archive |
Hi! Am Sat, 11 May 2002 10:23:49 +0200 schrieb "Norbert Pfeiffer" <norbert_(at)_itbw.de>: > schaun mer mal: > http://itbw.de/_tests/diverse/phplist/rel_path.php4 > > passt das ? Ja, das sieht gut aus... Allerdings habe ich heute Nacht selber noch ne entsprechende Funktion geschrieben. Liefert im großen und ganzen die selben Ergebnisse, verarbeitet jedoch auch URLs (brauch ich nicht, hat aber spaß gemacht :D) und kann auch mit Pfaden umgehen die nicht den selben root haben - dann hängt die Funktion das Arbeitsverzeichnis davor. Wollte ich schon früher posten, aber als ich gegen 4.30 Uhr damit fertig war haben die Batterien meiner (Funk-) Tastatur den Geist aufgegeben :-/ Trotzdem Danke :-) function relPath($path1, $path2) { /** * Returns the relative path between two directories. **/ // Get the path elements if the one of // the parameters is an URL if (preg_match('~^[a-z]+://~i', $path1) OR preg_match('~^[a-z]+://~i', $path2)) { $url1 = parse_url($path1); $url2 = parse_url($path2); // Everything up to the path have to be the same if ( $url1['scheme'] !== $url2['scheme'] OR $url1['host'] !== $url2['host'] OR $url1['port'] !== $url2['port'] OR $url1['user'] !== $url2['user'] OR $url1['pass'] !== $url2['pass']) { return $path2; } $path1 = $url1['path']; $path2 = $url2['path']; } else { // We need absolute filenames. if (substr($path1, 0, 1) != '/') { $path1 = getcwd() . '/' . $path1; } if (substr($path2, 0, 1) != '/') { $path2 = getcwd() . '/' . $path2; } } // Strip of a trailing slash if (substr($path1, -1, 1) == '/') { $path1 = substr($path1, 0, strlen($path1) - 1); } if (substr($path2, -1, 1) == '/') { $path2 = substr($path2, 0, strlen($path2) - 1); } // Split the Path into its elements $comp1 = explode('/', $path1); $comp2 = explode('/', $path2); // Remove all directories which doesn't differ foreach ($comp1 AS $key=>$val) { if ($comp1[$key] == $comp2[$key]) { unset($comp1[$key]); unset($comp2[$key]); } else { break; } } $relPath = '.'; // Go down one step for each directory in $comp1 foreach ($comp1 AS $val) { $relPath .= '/..'; } // Go up to every directory in $comp2 foreach ($comp2 AS $val) { $relPath .= '/' . $val; } return $relPath; } cu, Roland Tapken -- Please reply to: tapken_(at)_engter.de PGP Public Key: http://www.engter.de/~tapkenea/gnupg_roland.txt ~~~ I'm a signature-virus. Please copy me into your sig. ~~~
php::bar PHP Wiki - Listenarchive