Sven Rautenberg: Arghs...ich programmiere mich rein und wieder raus

Beitrag lesen

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):

  
$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:

  
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

--
My sssignature, my preciousssss!