Hi Sven,
habs gelesen, bracuhe aber mit Nachschlagen zum Verstehen etwas länger. Ich melde mich, sobald ich sicher bin, es verstanden oder auch noch nicht ganz verstanden zu haben, ok?
Sorry, aber bei mir braucht das leider etwas länger. Mit "readonly" ists bei mir leider nicht getan :-D
Bis später und jetzt schonmal bedankt für die Antwort
Jochen
Moin!
Mein Hauptproblem ist momentan, die Dateien, die rekursiv gefunden werden, mitsamt Pfadangaben ins array, bzw. das Verzeichnis zu schreiben.
Bei meinem Codebeispiel wird der Pfad nicht kosequent erkannt, abgesehen davon, daß es ohne global gar nicht funktioniert.Dann machen wir das doch am Besten mal weg:
function show_dir($dir, &$dirarr, $pos=2)
// mit der &-Schreibweise übergibst du in die Funktion eine Referenz auf eine Variable, die im Funktionsaufruf übergeben wird. Das ist im Prinzip auch ein Zugriff auf eine globale Variable, aber innerhalb der Funktion mußt du den außerhalb verwendeten Variablennamen nicht wissen, sondern benutzt den oben definierten: $dirarr{
if($pos == 2)
{
echo "<hr><pre>";
}
// Ausgabefunktionen würde ich in dieser Funktion entfernen, die Ausgabe solltest du komplett außerhalb von show_dir() regeln.$handle = @opendir($dir);
while (($file = readdir($handle)) !== false)
{
if (preg_match("=^.{1,2}$=", $file))
{
continue;
}if(is_dir($dir.$file))
{
printf ("% ".$pos."s <b>%s</b>\n", "|-", $file);
show_dir($dir.$file."/", $dirarr, $pos + 3);
// Hier wird zusätzlich das Array $dirarr mit übergeben, damit die rekursive Funktion auch weiter "innen" das Array abkriegt, in das die Dateinamen gelegt werden.
}
else
{
printf ("% ".$pos."s %s\n", "|-", $file);
$dirarr[]=$dir."/".$file
// Hier wird durch den []-Operator ans Ende des Arrays einfach ein neuer Eintrag hinzugefügt, wenn eine Datei gefunden wurde. Der Dateiname setzt sich aus $dir und $file zusammen, ergänzt durch einen Slash.
}
}@closedir($handle);
if($pos == 2)
{
echo "</pre><hr>";
}}
$namen = array();
show_dir("/",$namen);
// Dieser Aufruf legt alle gefundenen Dateinamen in $namen ab. Dieses Array kannst du dann später verarbeiten.
>
> > Übrigens, ein assoziatives Array brauch ich eher nicht, weil die Dateiangaben nicht so wichtig sind. Das Script muß ich im späteren Verlauf noch so gestalten, daß es sich selber aufruft und immer nur eine Datei (oder auch 5 Dateien, weiß noch nicht) gleichzeitig bearbeitet, da ich sonst Probleme mit der Laufzeitbegrenzung von scripten (von Schlund vorgegeben) bekomme.
>
> Was hast du denn alles vor mit den Dateinamen?
>
> > Sollte aber gehen, wenn ich das ganze in die Datei schreibe, es immer wieder einlese und dem Script mit auf den Weg gebe, wo es ansetzen soll.
>
> Vorsicht mit der Gleichzeitigkeit. Du mußt deine Textdatei unbedingt gegen gleichzeitige Benutzung, insbesondere gegen Schreibzugriffe, sperren, wenn dein Skript daran arbeitet. Siehe [flock()](http://www.php.net/flock).
>
> - Sven Rautenberg