Dateien auf der Festplatte besitzen neben ihrem Inhalt und ihrem Namen zusätzliche Informationen, wie z. B. die Dateigröße, das Datum der letzten Änderung und Zugriffsrechte. Unter Windows können Sie diese Informationen abrufen, indem Sie im Windows-Explorer (dem Dateimanager) mit der rechten Maustaste auf eine Datei klickt und den Menüpunkt „Eigenschaften“ aufruft. Diese Informationen über Dateien können in einem PHP-Skript interessant sein.
Stellen Sie sich vor, Sie wollen eine PHP-Anwendung schreiben, die es dem Benutzer erlaubt, Dateien auf dem Web-Server zu verwalten. Dann ist es sinnvoll, wenn der Benutzer Informationen wie z. B. die Dateigröße angezeigt bekommt, oder vielleicht sogar die Möglichkeit, nach Dateien eines bestimmten Änderungsdatums zu suchen. Die Funktion stat() macht Ihrem Skript diese Informationen zugänglich.
Der Syntax:
stat(Dateiname)
Die Funktion erwartet als einzigen Parameter den Namen einer Datei. Sie liefert einen assoziativen Array zurück, in dem die Dateiinformationen gespeichert sind. Auf die Elemente können Sie entweder über numerische Indizes oder über die besser merkbaren benannten Indizes zugreifen, also z. B. entweder mit $a[7] oder mit $a['size'], wenn Sie die Dateigröße ermitteln will [Fußnote 1].
Ein Beispiel soll die Verwendung der Funktion stat() und die Interpretation des Rückgabewertes verdeutlichen:
<?php
$stat = stat('D:\xampp\php\php.exe');
if ($stat != false) {
if (is_array($stat) == true) {
foreach($stat as $k => $v) {
if (is_numeric($k) == false)
echo 'Key = '.$k.' Value = '.$v.'<br>';
}
}
}
?>
Das Beispiel ruft stat() mit dem Namen des PHP-Interpreters auf und speichert den Rückgabewert in der Variablen $stat. Anschließend wird geprüft, ob der Aufruf erfolgreich war – wenn unter anderem die angegebene Datei nicht existiert, wird der Wert false zurückgegeben. Als zusätzliche Sicherheitsüberprüfung wird noch getestet, ob der zurückgegebene Wert ein Array ist.
Sollten beide Prüfungen erfolgreich verlaufen, geht die foreach-Schleife über alle Werte des Arrays und gibt die Schlüssel-Wert-Paare aus, deren Schlüssel nicht numerisch sind. Der Grund für die Überprüfung auf numerische Schlüssel wurde oben bereits angedeutet: Alle Werte des Arrays sind sowohl über numerische als String-Indizes erreichbar, die Überprüfung sorgt dafür, dass die Werte nicht mehrmals ausgegeben werden.
Die (gekürzte) Ausgabe des Beispiels kann – je nach verwendetem System – etwa folgendermaßen aussehen:
Key = size Value = 14578112
Key = atime Value = 12887263661
Key = uid Value = 0
Bei der Verarbeitung der Werte ist zu beachten, dass die Informationen nach Unix-Manier abgespeichert sind. Zeitangaben, wie das Datum der letzten Änderung oder das Datum des letzten Zugriffs sind in Sekunden seit dem 1. Januar 1970 gespeichert. Zur Umwandlung in lesbare Zeitangaben stellt PHP geeignete Funktionen zur Verfügung. Ein interessantes Feld im Array hat den Index 'mode' und gibt die Berechtigungen an, die für die Datei gelten. Damit kann geprüft werden, ob eine Datei auf dem Server überschrieben werden kann. Die Angaben über den Besitzer und die Gruppe der Datei sind unter Windows nutzlos, da diese immer auf 0 gesetzt werden (so wie in obiger Ausgabe der Wert für den Schlüssel „uid“, was für „User-ID“, also den Besitzer steht).
Die Funktion stat() bietet also die grundlegende Funktionalität, um in einer Dateiansicht – etwa in einem Web-basierten Content-Management-System – die Dateigröße sowie Zeit und Datum der letzten Änderung darzustellen.
[Fußnote 1] Hier gehen wir davon aus, dass die Variable $a mit dem Rückgabewert eines stat() Aufrufs belegt wurde.