Mailinglisten-Archive |
> Nur wie kann ich das ganze rekursiv machen? > D.h. wenn ein Unterordner gefunden wird, soll dessen Inhalt auch ausgegeben > werden. so ein zufall :) gestern hab ich meine rekursiven funktionen mal überarbeitet und als statische methoden in eine klasse gepackt. dh du kannst sie auch per copy and paste als standalone funktion verwenden. -readList liest verzeichnisse in lineares array -readTree liest verzeichnisse in verschachteltes array ich hoffe das ist jetzt kein overhead für dich, bei problemen gleich fragen. PS: falls jemandem für die readTree geschichte eine bessere struktur einfällt, bitte ich um vorschläge. hier der code: ------------------------------------------------------- class DirectoryReader { function readList(&$arr, $dir, $replace=false) { if ($h = opendir($dir)) { while (false !== ($file = readdir($h))) { if ($file !== '.' && $file !== '..') { if($replace) { $curDir = "$dir/$file"; $arr[] = str_replace(key($replace), $replace[key($replace)], $curDir); } else { $curr = $arr[] = "$dir/$file"; } if(is_dir($curDir)) { DirectoryReader::readList($arr, $curDir, $replace); } } } } closedir($h); return $arr; } function readTree(&$arr, $dir, $replace=false) { if ($h = opendir($dir)) { while (false !== ($file = readdir($h))) { if ($file !== '.' && $file !== '..') { if($replace) { $curDir = "$dir/$file"; $value = str_replace(key($replace), $replace[key($replace)], $curDir); } else { $curDir = $value = "$dir/$file"; } if(is_dir($curDir)) { $arr[] = array('type' => RDR_TYPE_DIR, 'value' => $value, 'node' => array()); DirectoryReader::readTree($arr[count($arr)-1]['node'], $curDir, $replace); } else { $arr[] = array('type' => RDR_TYPE_FILE, 'value' => $value); } } } } closedir($h); return $arr; } }
php::bar PHP Wiki - Listenarchive