Seiten Index (2)

Da die Ausgabe des Algorithmus von Gestern noch nich das war, was ich eigentlich wollte, aber das Grundgerüst sehr gut war, habe ich diesen nun so modifiziert, dass er, wie schon der erste Versuch, eine Tabelle mit dem Seiten Index ausgibt.
Diesmal werden aber alle Unterordner und auch das root-Verzeichnis durchsucht. Nur Väter des root-Verzeichnisses werden nicht betrachtet.

Diesmal werde ich zuerst den kompletten Code präsentieren und danach einzelne Teile besprechen. Ich hoffe, dass man dadurch ein besseres Verständnis des Codes bekommt, da mir die Variante mit den Code-Schnipseln nicht so zugesagt hat.

Here we go:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
function createFileIndex( $start = '.')
{
    //catch error
    if(! is_dir($start))
		return false;
 
	//initalize stuff
	echo "<table cellpadding=0 cellspacing=0 border=1 rules=rows>";
	$dirs = array( $start);
 
	echo "<tr><th>NAME</th>
		<th style='width:50px'></th>
		<th align=center>SIZE</th>
		<th style='width:20px'></th>
		<th align =center>TYPE</th>
		<th style='width:20px'></th>
		<th align=center>DATE CREATED</th>
		</tr>";
 
	//search iterative
	while( NULL !== ($dir = array_pop( $dirs)))
	{
		$dh = opendir($dir);
		while( $file = readdir($dh) )
		{
			//skip current directory and php-files
			if( $file == '.' || $file == '..' || substr($file,-3)=="php")
				continue;
			$path = $dir . '/' . $file;
			//if path is an directory
			//=> write into array, else write the files attributes into the table
			if( is_dir($path) )
				$dirs[] = $path;
			else
			{
				//get file infos
				$ftime = gmdate("d.M.y",filemtime($path))
					. "&nbsp;&nbsp;&nbsp;"
					. gmdate("H:i:s",filemtime($path));
				$fsize = round(filesize($path) * .0009765625);
				$ftype = strtolower(substr(strrchr($file,'.'),1));
 
				//to table
				$output = "<tr>
				<td><a href='$path'>$file</a></td>
				<td></td>
				<td align=center>$fsize KB</td>
				<td></td>
				<td align=center>$ftype</td>
				<td></td>
				<td align=right>$ftime</td>
				</tr>";
				echo $output;
			}
		}
		closedir($dh);
	}
	echo "</table>";
}

Der Algorithmus funktioniert wie folgt:

  1. Es wird ein Array “dirs” erstellt, in welches der Startpunkt (root) geschrieben wird.
  2. Das letzte Element aus “dirs” (ein Verzeichnis) wird herausgeholt und dabei entfernt, sollte das Entnehmen eines Elementes aus dem Array nicht möglich sein, wird der Algorithmus beendet.
  3. Das entnommene Verzeichnis wird nun auf der Suche nach Inhalten durchlaufen. Dabei wird unterschieden, ob es sich bei dem gefundenen Eintrag um ein Verzeichnis oder eine Datei handelt.
    • Fall 1 (Verzeichnis): Das gefundene Verzeichnis wird mit kompletten Pfad in das Array “dirs” geschrieben, um später auch in diesem Verzeichnis nach Datein zu suchen.
    • Fall 2 (kein Verzeichnis): Es wurde eine Datei gefunden. Also holen wir uns von der Datei alle Attribute, die wir wünschen (Name, Größe, Typ, Erstelldatum), und schreiben alles in eine Tabelle.
  4. Wenn das Verzeichnis komplett durchlaufen wurde, geht es wieder zu Punkt 2.

Als Ausgabe erhält man zum Beispiel:
Beispiel Ausgabe

Wie man sieht wurde auch schon ein bisschen an der Optik gefeilt.
Es gibt das erste Mal eine Kopfzeile, anstatt in Bytes ist die Größenangabe in KB und auch das Erstelldatum ist ein Wenig übersichtlicher dargestellt.

Das wars mal wieder. Nächste Woche gehts weiter. Dann wird hoffentlich an der Optik gefeilt.

So long,
Seb

Download Code

Verwandte Artikel

Autor: Seb
Datum: Saturday, 5. July 2008 0:23
Trackback: Trackback-URL Themengebiet: PHP

Feed zum Beitrag: RSS 2.0 Diesen Artikel kommentieren

Kommentar abgeben