Die Funktion dirlist() liefert für ein Verzeichnis eine sortierte Liste der enthaltenen Dateien und Verzeichnisse als numerisches Datenfeld zurück. Die obligatorischen Verzeichniseinträge "." und ".." werden nicht aufgelistet. Dateien, deren Dateinamen mit dem Zeichen "." beginnen werden ebenfalls nicht aufgelistet. Das betrifft insbesondere Dateinamen wie ".htaccess" oder ".password". Die Dateinamen enthalten keine Pfadangaben. Verzeichnisnamen enthalten keinen abschließenden Querstrich "/".
Der optionale Parameter $filter kann verwendet werden um die Ausgabe auf bestimmte Dateiendungen zu beschränken. Wildcards sind nicht gestattet. Der Dateifilter darf lediglich alphanumerische Zeichen, sowie die Zeichen '.', '-' und '_' enthalten. Andere Zeichen werden beim Aufruf der Funktion automatisch entfernt.
alle Einträge eines Verzeichnisses ausgeben:<?php echo implode("<br>", dirlist("foo/")); ?>
Ausgabe: foo1.foo2 foo3.foo2 foo4.foo5 foo6.foo7 alle Einträge mit passender Dateiendung ausgeben:<?php echo implode("<br>", dirlist('foo/', '*.foo2')); ?>
Ausgabe: foo1.foo2 foo3.foo2 ... mit mehreren Dateiendungen:<?php echo implode("<br>", dirlist('foo/', '*.foo2|*.foo5')); ?>
Ausgabe: foo1.foo2 foo3.foo2 foo4.foo5 objektorientierte Variante:<?php $dirStream = new DirStream("foo/"); $dirStream->read(); $dirlist = $dirStream->dirlist('*.foo2|*.foo5'); echo implode("<br>", $dirlist); /* Hinweis: das Setzen des Dateifilters ist permanent. */ $dirStream->dirlist('*.foo2|*.foo5'); echo $dirStream->length(); /* Ausgabe: 2 */ echo count($dirStream->get()); /* Ausgabe: 2 */ /* Ein erneuter Aufruf von dirlist() setzt den Dateifilter neu */ $dirStream->dirlist(""); echo $dirStream->length(); /* Ausgabe: 4 */ ?>
Die Funktionen $dirStream->create($mode) beziehungsweise $dirStream->delete() sind für Erzeugen beziehungsweise Löschen von Verzeichnissen verantwortlich. Der optionale Parameter $mode kann verwendet werden, um unter LINUX/UNIX -Betriebssystemen Zugriffsrechte von Verzeichnissen festzulegen. Der Defaultwert ist 777.
Beispiele für gültige Werte für $mode finden Sie in der folgenden Tabelle. Dabei steht "r" für "readable", "w" für "writeable" und "x" für "executable".
Besitzer | Gruppe | sonstige Nutzer | Wert |
---|---|---|---|
rwx |
rwx |
rwx |
777 |
rw- |
rw- |
--- |
660 |
rw- |
rw- |
rw- |
666 |
rwx |
r-x |
r-x |
755 |
rwx |
r-x |
--- |
750 |
rwx |
--- |
--- |
700 |
Beispiele für gültige Werte (entsprechend Unix: CHMOD)
<?php
$dirStream = new DirStream("foo/");
$dirStream->read();
/* erzeuge das Verzeichnis "foo/" */
$dirStream->create();
/* erzeuge das Verzeichnis "foo/" mit Zugriffsrechten 660 */
$dirStream->create(660);
/* Anzahl der Dateien in einem Verzeichnis feststellen */
print "Verzeichnis 'foo/' enthält ".$dirStream->length()." Dateien.";
/* lösche das Verzeichnis "foo/" */
$dirStream->delete();
/* lösche das Verzeichnis "foo/" inklusive aller Dateien und Unterverzeichnisse */
$dirStream->delete(true);
/* prüfe ob Verzeichnis existiert */
$test = $dirStream->exists();
if ($test === true) {
print "Verzeichnis existiert";
} else if ($test === false) {
print "Verzeichnis existiert NICHT";
}
?>
Die Funktion SML::getFile() lädt die angegebene Konfigurationsdatei im SML-Format und liefert den Inhalt als PHP-Variable zurück.
<?php /* Lies Inhalte von Datei und gib Inhalte als Array zurück */ $array = SML::getFile("foo.config"); /* Schlüssel in Großbuchstaben */ $array = SML::getFile("foo.config", CASE_UPPER); /* Schlüssel in kleinen Buchstaben */ $array = SML::getFile("foo.config", CASE_LOWER); /* Schlüssel so wie gespeichert (default) */ $array = SML::getFile("foo.config", CASE_MIXED); /* ... oder: */ $array = SML::getFile(file("foo.config")); /* ... oder: */ $array = SML::decode(file_get_contents("foo.config")); /* einen SML-String erzeugen und dekodieren */ $input_array = array(1,2,3,array(4,5),'a'=>6,'B'=>7); $output_array = SML::decode(SML::encode($input_array)); $input_array == $output_array; // true /* objektorientierte Variante, gemischte Schreibweise */ $configFile = new ConfigFile("foo.config"); $configFile->read(); $array = $configFile->get(); /* objektorientierte Variante, Schlüssel in Großbuchstaben */ $smlFile = new SML("foo.config"); $smlFile->read(); $array = $smlFile->get(); ?>
Navigieren innerhalb einer SML-Datei: Angenommen die Datei "foo.config" hätte folgenden Inhalt: <ROOT> <FOO1> <FOO2>text</FOO2> <FOO3> <0>1</0> <1>foo</1> </FOO3> </FOO1> </ROOT><?php $mixed = $smlFile->get("ROOT.FOO1"); print_r($mixed); ?>
Diese Abfrage liefert den Teilbaum ROOT.FOO1 mit FOO1 als Wurzelement. Ausgabe: array( "FOO2" => "text", "FOO3" => array ( 0 => 1, 1 => "foo" ) )
Die Funktion SML::encode() erzeugt für die übergebene Variable eine Darstellung als SML-Code und liefert diesen als String zurück. Es muss sich entweder um eine Variable mit einem skalaren Wert oder ein Array handeln.
Bitte beachten Sie: die Funktion "SML::encode" erkennt keine unendlichen Rekursionen. Daher müssen die Datenfelder rekursionsfrei sein. Andernfalls wird durch den Compiler eine Fehlermeldung erzeugt.
Speichert die Einträge eines Array in der Datei "foo.config":<?php $string = SML::encode($array, "ROOT"); file_put_contents("foo.sml", $string); ?>
Ersetzen Sie "ROOT" durch den Namen des Wurzelelements! Benutzen von Großbuchstaben, Kleinbuchstaben und gemischter Schreibweise analog zu SML::decode():<?php $string = SML::encode($array, "ROOT", CASE_UPPER); // groß $string = SML::encode($array, "ROOT", CASE_LOWER); // klein $string = SML::encode($array, "ROOT", CASE_MIXED); // gemischt (default) ?>
objektorientierte Variante, gemischte Schreibweise:<?php $configFile = new SML("foo.sml"); $configFile->read(); $configFile->create(); $configFile->insert($string); $configFile->write(); ?>
objektorientierte Variante, Schlüssel in Großbuchstaben:<?php $smlFile = new SML("foo.sml", CASE_UPPER); $smlFile->read(); $smlFile->create(); $smlFile->insert($string); $smlFile->write(); ?>
Zum Kopieren einer Datei besitzen alle YANA-Klassen, die Dateien repräsentieren, die Funktion "copy". Beim Kopieren der Datei können außerdem auch deren Zugriffsrechte gesetzt werden. Sollte das Verzeichnis, in welches die Datei kopiert werden soll, noch nicht existieren, kann es automatisch erzeugt werden. Letzteres ist optional.
Im Folgenden einige Beispiele.
eine Datei kopieren:<?php $foo = new SecureFileStream("foo.txt"); $foo->copy("bar.txt"); $foo->copy("bar.txt"); // Fehlermeldung: Datei existiert bereits ?>
eine Datei kopieren und bereits existierende Dateien überschreiben:<?php $foo->copy("bar.txt", true); $foo->copy("bar/foo2.txt"); // Fehlermeldung: Verzeichnis 'bar' existiert nicht ?>
eine Datei kopieren und fehlende Verzeichnisse automatisch erzeugen:<?php $foo->copy("bar/foo2.txt", false, true); /* Das Verzeichnis 'bar/' wurde angelegt und die Datei 'foo2.txt' darin gespeichert. Die Zugriffsrechte für das Verzeichnis wurden per Default auf 766 gesetzt. */ /* das Verzeichnis wird nun wieder gelöscht */ $dir = new DirStream("bar"); $dir->delete(true); ?>
eine Datei kopieren und Zugriffsrechte für die kopierte Datei auf 655 setzen:<?php $foo->copy("bar/foo2.txt", false, false, 655); /* Das Verzeichnis 'bar/' wurde erneut angelegt. Die Zugriffsrechte für das Verzeichnis wurden nun auf 655 gesetzt - so wie für die Datei. */ ?>
Thomas Meyer, www.yanaframework.net