Hallo Sven,
puh, ganz schön viele Informationen :-)
Erstmal vielen, vieln Dank für die ausführlich Antwort und die damit verbundene Mühe.
Was basename() und dirname() angeht, das hört sich gut an und ich schaus mir in der Doku an.
Und ok, mach ich nur ein array und ermittel den Verzeichnisnamen später.
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.
Ich habe mir dieses Script hier ( http://www.php-faq.de/q/q-code-verzeichnis.html ) als Grundlage genommen, verliere aber unterwegs (siehe mein geänderter Code, inkl. global) trotzdem immer wieder der Pfad.
Ü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.
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.
Grüße, Jochen
Moin!
Ich finde es jedenfalls extrem bedenklich, dass du in der Funktion globale Variablen benutzt.
wenns anders geht, gerne :-)
Es geht auf jeden Fall anders, und du solltest es auch unbedingt so machen. Denn deine Funktion ist dann viel leichter auch woanders verwendbar, du kannst sie unabhängig vom Wissen, welche globalen Variablen sie erfordert, überall einsetzen. Und außerdem ist der Zugriff auf globale Variablen schlechter Programmierstil. Sicher, manchmal vereinfacht das einige Dinge, aber meistens führt es langfristig gesehen eher zu Problemen.
Ich benötige später zum einen den reinen Dateinamen. Klar, könnte ich auch über "explode" rausfiltern, aber wozu?
Warum nicht? Redundanz produzieren ist ja nicht unbedingt notwendig, oder? :)
Als Arrayformat stelle ich mir erstmal ganz simpel, wie du ja auch, eine Liste mit allen gefundenen Pfad- (d.h. Verzeichnis- plus Datei-) Namen vor:
$dir[0]="/dir1/dir2/file";
$dir[1]="/dir1/dir3/dir4/file";
...
>
> Dann kriegst du mit basename() aus den Pfadnamen ganz leicht den Dateinamen extrahiert.
>
> Man könnte sich auch überlegen, den Pfadnamen anstelle als Wert des Arrays als Arrayschlüssel zu verwenden - dann wird der Arraywert frei zur Belegung mit beispielweise den Dateieigenschaften, die man so feststellen kann: Dateigröße, Rechte, Dateityp, Änderungsdatum,...
>
> In "schlicht" also sowas (Dateigröße in Byte):
>
> ~~~php
> $dir["/dir1/dir2/file"]=10256;
> $dir["/dir1/dir3/dir4/file"]=15675765;
> ...
>
Aufgebohrt mit mehreren Angaben empfiehlt sich ein mehrdimensionales Array:
$dir["/dir1/dir2/file"]['size']=10256;
$dir["/dir1/dir2/file"]['lastmodified']="20050316231541";
$dir["/dir1/dir2/file"]['rights']="0644";
$dir["/dir1/dir3/dir4/file"]['size']=15675765;
$dir["/dir1/dir3/dir4/file"]['lastmodified']="20050902142311";
$dir["/dir1/dir3/dir4/file"]['rights']="0700";
...
>
> In beiden Fällen, egal ob schlicht oder komplexer, kannst du mit einer foreach-Schleife alle gefundenen Dateien durchgehen:
>
> ~~~php
> foreach ($dir as $filename => $properties)
> {
> echo "Datei ".basename($filename)." im Verzeichnis ".dirname($filename).":<br>";
> echo "Größe: ".$properties['size']."<br><br>";
> }
>
Mit basename() und dirname() hast du zwei recht simple Funktionen zur Ermittlung von Teilen der Pfadangabe, die rein auf Stringbasis arbeiten (also nicht im Dateisystem suchen und damit sehr langsam wären) und praktisch selbsterklärend sind - d.h. auch, dass du nicht durcheinanderkommen kannst, oder sich Pfadname und Dateiname irgendwie voneinander trennen können.
Also: Was darf es sein?
- Sven Rautenberg