[PHP] buildPath
/**
* Generiert aus allen übergebenen Values einen Pfad mit dem passenden Separator.
* Die Funktion ändert auch alle Separatoren in den Umgebungsabhängigen Separator
* @paramArray String die verschiedenen Teile aus denen der Pfad gebildet werden soll
* @return String der zusammengesetzte Pfad
*/
function buildPath(){
//Auflistung aller möglichen Separatoren
define('C_SEPARATORS', DIRECTORY_SEPARATOR.'\/');
//Pattern um herauszufinden ob der Pfad mit einem Protokol beginnt
define('C_PROTOKOL_PATTERN', '/^(?:http|ftp)\:\/\//i');
//Pattern um bestehende Pfade aufzubrechen
define('C_SPLIT_PATTERN', '#['.addslashes(C_SEPARATORS).']#');
//Alle Paramer auslesen
$items = func_get_args();
//Führende und folgende Separotren entfernen
array_walk($items, create_function('&$item, $key', '$item = trim($item, C_SEPARATORS);'));
//Leere Elemente entfernen
$items = array_filter($items);
//Bei einem http oder ftp immer / als separator verwenden. Ansonsten der vom System
$separator = (preg_match(C_PROTOKOL_PATTERN, reset($items)) == 1 ) ? '/' : DIRECTORY_SEPARATOR;
//Bestehende Pfade aufbrechen
$parts = array();
foreach($items as $item) $parts = array_merge($parts, preg_split(C_SPLIT_PATTERN, $item));
//Pfad zusammensetzen
return implode($separator, $parts);
}