• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[PHP] verzeichnisse einlesen und daraus Navi basteln

.holger

Lounge-Member
Moin moin!

Vorgeschichte : wir wissen ja, der (all)gemeine .holger ist sehr faul und er versucht seine Arbeit auf ein Minimum zu beschränken bzw. einen kurzen aber hohen Anstrengungspegel zu erreichen um sich dann gemütlich zurück fallen zu lassen und zu sehen wie alles funktioniert und er sich um ncihts mehr kümmern muss.
Problem : Deswegen möchte der gewöhnliche .holger eine "automatische Navigation" auf seiner Fotoseite haben um nur noch per ftp Ordner mit Fotos hochzuschieben und diese werden automatisch eingebunden.
Idee : Die Ordnernamen bilden den navi-tree und in dne untersten Ordnern sind dann die Bilder. Diese sin in verschiedene Kategorien und mehrere Untergategorien eingeteilt (z.B. Konzertfotos/Sportfreunde-stiller/17-12-04/)
Lösungsansatz : Die Ordner werden mit einem PHP script ausgelsen und in ein Array geschrieben, aus dem diese dann wieder herausgefiltert werden und als Navi ausgegeben werden.

PHP:
$basedir = "../fotoseite/fotos";

function listdir($basedir,&$a_dir){
    if ($handle = @opendir($basedir)) {
        while (false !== ($dir = readdir($handle)))
        {
            if ($dir == '.' || $dir == '..'){
            } else {
                if (is_dir($basedir."/".$dir)){
                    $a_dir[] = $basedir."/".$dir;
                    listdir($basedir."/".$dir,$a_dir);
                }
            }
        }
        closedir($handle);
    }
    return $a_dir;
}
listdir($basedir,$a_dir);
print_r($a_dir);

So weiter bin ich noch nicht :) falls mir jemand helfen möchte wäre das sehr nett :) ich werd mal weiter rumtüfteln :)
 
jo das trifft sich wirklich gut.

Ich muss doch jetzt das Array, das ich bekomme und das mit Print_r (bei mir in meinem Testverzeichnissystem) dieses Ergebnis erzeugt:
Array ( [0] => ../fotoseite/fotos/konzertfotos [1] => ../fotoseite/fotos/konzertfotos/virginia-jetzt [2] => ../fotoseite/fotos/rundflug071104 [3] => ../fotoseite/fotos/feuerwerk [4] => ../fotoseite/fotos/ibook [5] => ../fotoseite/fotos/mundms )
nur ncoh aufstplitten, so dass die Teile die die selben Teile beinhalten (hier [0] und [1] ) richtig auseinandergeflückt werden, nur wie?
 
na ja.. ich hab doch in meinem Array jetzt die kompellten Verzeichnissnamen:
../fotoseite/fotos/konzertfotos
../fotoseite/fotos/konzertfotos/virginia-jetzt
../fotoseite/fotos/rundflug071104

aber das verzeichnis "virginia-jetzt" ist ja ein Unterverzeichnis von "konzertfotos". Das will ich ja nicht in der selben Menüebene verlinken wie konzertfotos (die Leute sollen erst auf konzertfotos gehen und dann auf virginia-jetzt)

hmm.... ich hab mir grad mal ein schönes Menü gesucht (dhtmlcentral - coolmenus) ich denke mal dass ich das irgendwie benutzen werde (warum das Rad zweimal erfinden)

Ich muss jetzt aber los zur Uni.... und da mein ibook noch nicht da ist werd ich wohl erst heute abend (wenn überhaupt) weitercoden können......
 
Vielleicht hilft dir das weiter ?

PHP:
<?php

/************************************************
*                                               *
*           © Autor René Marscheider            *
*       © E-Mail: webmaster@janaserver.de       *
*          © http://www.janaserver.de/          *
*  © Bitte entfernen Sie diesen Vermerk nicht!  *
*                                               *
************************************************/

class indexer
{
	function show_dir($dir, $pos = 2)
	{
		$dirs = dir($dir);

		while ($file = $dirs->read())
		{
			if (preg_match('/(^\.{1,2}$|^\.htaccess$|^\.htpasswd$)/i', $file))
				continue;

			if (is_dir($dir . '/' . $file))
			{
				printf('% ' . $pos . 's <span class="dir">%s</span>' . "\r\n", '|-', $file);
				$this->show_dir($dir . '/' . $file, $pos + 3);
			}
			else
				printf('% ' . $pos . 's <a href="' . str_replace($_SERVER['DOCUMENT_ROOT'], '', $dir . '/' . $file) . '" target="dir_index">%s</a> <span class="info">' . date('d.m.Y H:i:s', filemtime($dir . '/' . $file)) . ' | ' . number_format(filesize($dir . '/' . $file) / pow(1024, 1), 2, ',', '.') . ' KB</span>' . "\r\n", '|-', $file);
		}

		$dirs->close();
	}
}

$di =& new indexer;

/**/

echo <<<EOF
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Content-Language" content="de">
<title>Directory</title>

<style type="text/css">
<!--
body
{
	margin: 10px;
}

pre
{
	background-color: #eee;
	padding: 10px;
}

a
{
	text-decoration: none;
	color: darkblue;
}

a:hover
{
	color: blue;
}

.dir
{
	font-family: Courier;
	font-weight: bold;
	color: crimson;
}

.info
{
	color: darkgreen;
}
//-->
</style>

</head>
<body>

<pre>
EOF;

/**/

$di->show_dir(getcwd());

/**/

echo <<<EOF
</pre>

</body>
</html>
EOF;

?>
 
Zuletzt bearbeitet:
Hallo Rene´,

das ist genial, ich habe da auch so ein Verzeichnis mit log Dateien die ich als Liste brauche und ich hoffe daß ich Teile deines Scriptes benutzen darf...


bei der Ausgabe
PHP:
 /**/

$di->show_dir(getcwd());

/**/

ist mir allerdings nicht ganz klar wie man das ganze sortieren könnte, nach der Erzeugungszeit wär zB. nicht schlecht. Bis jetzt siehts etwas wüst aus:
URL als arg.übergabe

kann ich das schon vorsortieren?

PHP:
 printf('% ' . $pos . 's <tr><td valign="center" border="1" bgcolor="#555555"><a href="' . substr_replace($_SERVER['DOCUMENT_ROOT'], 'http://silent-force-clan.de/soldnerstats/soldnerstats.php?xml=http://silent-force-clan.de/soldnerstats/roundstats/', $dir . '/') . $file . '" target="_self"><img src="http://silent-force-clan.de/images/go.gif" border="0">  %s</a> <span class="info">' . ' |   ' . date('d.m.Y H:i', filectime($dir . '/' . $file)) . ' | ' . number_format(filesize($dir . '/' . $file) / pow(1024, 1), 2, ',', '.') . ' KB</span></td></tr>' . "\r\n", '', $file);

nach filectime zum Beispiel?
 
hallo hallo, ich kapier da was nicht:

warum kann ich diesen echo-Befehl nicht benutzen, ich bekomme die Fehlermeldung:

parse error, unexpected T_SL, expecting ',' or ';' in .. on line 39

das ist die Zeile, in der die Ausgabe mit <<<EOF beginnt

diese Art der Ausgabe kenne ich eigentlich nur aus perl und jetzt
mit php klappt sie nicht, warum nicht?

ich möchte das gerne verstehen:) danke!
planet4.
 
Hey

Vorgeschichte : wir wissen ja, der (all)gemeine .holger ist sehr faul und er versucht seine Arbeit auf ein Minimum zu beschränken bzw. einen kurzen aber hohen Anstrengungspegel zu erreichen um sich dann gemütlich zurück fallen zu lassen und zu sehen wie alles funktioniert und er sich um ncihts mehr kümmern muss.

Das klingt gut. Meine Frage dazu - Ist das Script schon fertig !!! ;)

By Nora
 
Ok, inzwischen sind 4 Jahre vergangen... aber bei entsprechender Sucheingabe ist dieser Thread ganz oben. Und ich suche genau das, was der Titel verspricht: Verzeichnisse einlesen und daraus Navi basteln.

Also stelle ich meine kurze und knappe (aber funktionierende) Lösung einmal vor (Achtung: Nur PHP5). Dabei werden wirklich nur die Unter-Verzeichnisse eines gewünschten Verzeichnisses aufgelistet. Man kann diese dann nach Belieben weiterverwenden, also bei einer Navigation zum Beispiel einen Link drumrum basteln, der eine bestimmte Seite aufruft.

Code:
<?php
$dir = './'; // Verzeichnis, das durchsucht werden soll
$list = scandir($dir); // Scandir findet alle Verzeichnisse/Dateien und speichert sie in einem Array

// Schleife, die jeden Eintrag einmal durchläuft
// und dabei Dateien aussortiert, so dass nur
// Verzeichnisse übrig bleiben.
// Fängt extra bei 2 an, da der Eintrag 0 das
// aktuelle Verzeichnis ist (.) und der Eintrag 1
// das übergeordnete Verzeichnis angibt (..).
for($i = 2; $i < count($list); $i++) {
	$thisDir = opendir($list[$i]); // Öffne Verzeichnis
	if($thisDir !== false) { // Hier werden Dateien aussortiert, denn natürlich klappt das Öffnen nur bei Verzeichnissen, nicht bei Dateien
		echo $list[$i]."<br>"; // Verzeichnis ausgeben
		closedir($list[$i]); // Schließe Verzeichnis
	}
}
?>

So - damit hat man alle Verzeichnisse einmal ausgegeben. Bei Bedarf kann man diese nun nach belieben weiterverarbeiten oder in ein Array speichern.

Grüße
Lars
 
Zurück
Oben