Werbung einblenden Werbung ausblenden


Home / Tutorials / PHP Handbuch / Arbeiten mit Verzeichnissen


Die Funktionen opendir und readdir
Verzeichnisse einrichten und wieder löschen
Die Funktion is_dir

Die Funktionen opendir und readdir

Die wichtigsten Befehle zum Arbeiten mit Verzeichnissen sind wohl opendir und readdir. readdir ist nicht 100% identisch mit der Perlfunktion, weil damit nicht alle Dateien auf einen Schlag in einen Array eingelesen werden. Man muss sie sequentiell auslesen.

<?
$verzeichnis_handle=opendir("c:/sambar/docs");
while($einzelne_datei=readdir($verzeichnis_handle))
{
print "$einzelne_datei <br>";
}
?>

Dies führt dann zu diesem Ergebnis:
.
..
footer.stm
header.stm
favicon.ico
index.stm
robots.txt
barchart
isapi
upload
samples
secure
logos
wwwping
search
netutils
finance
hallo.php
cms
xml
www
suchmaschine3.php
etc.

Wie wir sehen, erhalten wir auch zwei Dateien . und .. , die zur Steuerung dienen bei Angabe eines relativen physikalischen Pfades. Die wollen wir in der Regel nicht haben und eliminieren sie von daher. Weiter sehen wir, dass die zurückgelieferten Werte unsortiert sind. Wie ebenfalls deutlich zu sehen, gibt readdir nur die direkt darunter liegende Ebene an, macht also Verzeichnisse, die in Verzeichnissen liegen nicht auf. Will man das, muss man eine Funktion programmieren, die rekursiv aufgerufen wird, siehe Suchmaschine. In der Regel will man aber auch nicht alle Dateien sehen, sondern nur den Teil, der bestimmten Kriterien entspricht, z.B. auf htm oder html endet. Ein Möglichkeit dies zu realisieren, sieht so aus:

<?
$verzeichnis_handle=opendir("c:/sambar/docs");
$alle_dateien=array();
while($einzelne_datei=readdir($verzeichnis_handle))
{
if ($einzelne_datei != "." and $einzelne_datei !="..")
{
array_push($alle_dateien,$einzelne_datei);
}
}

$gefiltert=preg_grep("/.+\.(htm)|(html)/",$alle_dateien);
foreach ($gefiltert as $gefilterte_einzelteile)
{
print "$gefilterte_einzelteile <br>";
}
?>

Dies liefert als Ergebnis etwas in der Art.

gast.htm
index.htm
graphik2.htm
upload.htm
testbild.htm
mailus.htm
mailus2.htm
test.htm
testformular.htm
htmlwech.html

Es wurden also die Dateien herausgefiltert, die auf htm bzw html enden. Etwas in der Art will man machen, wenn man für eine lokale Website eine Suchmaschine bauen will. Die Funktion preg_grep wurde unter regular expressions erklärt.

Verzeichnisse einrichten und wieder löschen

Ein Verzeichnis einrichten ist ein relativ simpler Vorgang und sieht so aus:

<?
mkdir("c:/sambar/docs/torte",0755);
print "Das Verzeichnis Torte wurde eingerichtet";
?>

Die Zahl 0755 gibt an, wer , welche Rechte an der Datei besitzt. Je nach voreingestellter Maske, kann es auch nur 755 heissen. Das ist wichtig zu wissen, weil das Verzeichnis nicht erstellt wird, wenn der Paramater mit der Maske inkompatibel ist. Unter windows macht die Zahl 755 der Natur der Sache nach keine Sinn, sie bewirkt dann nichts, schadet aber auch nicht. Noch kurz zu der Rechtevergabe unter Unix und dessen Derivaten wie Linux. Unix ist ein Betriebssystem, dass, im Gegensatz zu windows, von vorneherein für den Netzbetrieb konzipiert war. Folglich ist die Verwaltung von Dateien sehr viel ausgefeilter als unter windows. In Unix und dessen Derivaten gibt es drei Typen von user: den owner, die group und die world. Der owner ist derjenige, der die Datei eingerichtet hat, die Gruppe sind mehrere andere User, die in der selben Gruppe sind, in der auch der Besitzer der Datei ist und die Welt ist halt der Rest der Menschheit. Die Rechte sind 1 für execute, 2 für write und 4 für execute. Die Zahlen werden addiert, so dass 5 (1 + 4) read and execute bedeutet, 6 (4+2) read and write, 7 (1+2+4) read, write and execute bedeutet. Die Kombination aus drei Zahlen bedeutet nun folgendes. Die erste Zahl nach der eventuell führenden 0 zeigt die Rechte des owners der Datei, die zweite Zahl zeigt die Rechte der Gruppe und die dritte Zahl zeigt die Rechte der Rest der Menschheit. Genauso fix ein Verzeichnis eingerichtet ist, ist es auch wieder gelöscht.

<?
rmdir("c:/sambar/docs/torte");
print "Das Verzeichniss Torte wurde gelöscht";
?>

Die Funktion is_dir

Bei Anwendungen, die teilweise für den User erst eingerichtet werden müssen, wie shops, siehe Shop oder homepagegeneratoren oder ähnliches, muss man feststellen können, ob das Verzeichniss schon existiert, weil dies Rückschlüsse darüber zulässt, ob für diese User die Anwendung schon implementiert ist oder nicht. Man kann dies tun mit der Funktion is_dir, die bei Erfolg 1 zurückgibt.

<?
mkdir("c:/sambar/docs/torte",0755);
$test=is_dir("c:/sambar/docs/torte");
if($test)
{
print "Hurra, das Verzeichniss wurde eingerichtet";
}
?>

Man beachte, dass man eine Fehlermeldung erhält, wenn man den Skript zweimal auslöst, weil ja dann das Verzeichnis bereits existiert, was ein erneutes Anlegen unmöglich macht. Genau genommen prüft die Funktion is_dir nicht nur ob die Datei existiert, sondern ob es sich hierbei auch tatsächlich um ein Verzeichnis handelt.

vorhergehendes Kapitel