| |
| * Link führt ins Internet |
|
| |
Nützliche Verzeichnisoperationen
|
|
In diesem Abschnitt haben wir noch einige nützliche Codeschnipsel zur Verarbeitung von Verzeichnissen.
Wie wäre es beispielsweise mit Hilfe eines Musters eine Liste von Dateinamen auszugeben.
Beispiel - nur dateinamen die .jpg enthalten
<?php
@$verzeichnis = dir(".") or die("Fehler!");
echo "Dateien:<br>";
while ($datei = $verzeichnis->read()) {
if (preg_match('/.jpg/',$datei)) {
echo "$datei<br>";
}
}
$verzeichnis->close();
?>
|
Das Muster lässt sich auf recht einfach auf jedes Dateiformat anpassen. Übrigens um die gefundenen Bilder auszugeben bedarf es lediglich einer kleinen Anpassung der echo-Anweisung: echo " ";.
Bearbeiten sämtlicher Dateien eines Verzeichnisses
Wie wäre es sämtliche Dateien eines Verzeichnisses und dessen Unterverzeichnisse samt Dateien aufzulisten und bearbeiten zu können, ist dies ohne weiteres machbar. Die Antwort auf diese Fragen lässt sich recht einfach mit Hilfe einer Rekursion klären. Hierfür haben wir eine nützliche Funktion, die Sie jederzeit einsetzen und auf Ihre Bedürfnisse anpassen können:
<?php
// Sämtliche Dateien in und unterhalb des Verzeichnisses erfassen
function lese_verzeichnisse($v_name,$funk_name,$max_tiefe = 10,$tiefe = 0) {
if ($tiefe >= $max_tiefe) {
error_log("Maximale Tiefe $max_tiefe von $v_name.");
return false;
}
$sub_vers = array();
$files = array();
if (is_dir($v_name) && is_readable($v_name)) {
$verzeichnis = dir($v_name);
while (false !== ($datei = $verzeichnis->read())) {
// . und .. nicht ausgeben
if (('.' == $datei) || ('..' == $datei)) {
continue;
}
// Verzeichnisse und Symbolische Links
if (is_dir("$v_name/$datei")) {
array_push($sub_vers,"$v_name/$datei");
} else {
$funk_name("$v_name/$datei");
}
}
$verzeichnis->close();
// Rekursiver durchlauf um die jeweiligen
// Unterverzeichnisse zu erreichen
foreach ($sub_vers as $sub_ver) { lese_verzeichnisse($sub_ver,$funk_name,$max_tiefe,$tiefe+1);
}
}
}
// Funktion zur Formatierung der Ausgabe
function printatime($p_datei) {
print "<a href=$p_datei>".basename($p_datei)."</a><br>";
}
lese_verzeichnisse('.','printatime');
?>
|
Die Funktion bearbeiten sämtliche gefundenen Dateien, indem Sie der Ausgabe einen Hyperlink hinzufügt, so dass sich die Dateien einzeln ansprechen lassen.
Besonderheit
Da is_dir() true zurückgibt, wenn es auf einen symbolischen Link trifft, der auf ein Verzeichnis verweist, folgt die Funktion auch symbolischen Links. Sollten Sie den symbolischen Links nicht folgen wollen, ändern Sie die Codezeile:
if (is_dir("$v_name/$datei")) {
in:
if (is_dir("$v_name/$datei") && (! is_link("$v_name/$datei"))) {
|
|
|
|
|
|
|