
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";
?>
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.
|
 |