phpbar.de logo

Mailinglisten-Archive

[php] Ordnerstruktur rekursiv ausgeben

[php] Ordnerstruktur rekursiv ausgeben

"patrick müller (aka elias)" ghostwwinside at gmx.net
Die Okt 26 11:33:01 CEST 2004


> 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