Signatur
Beschreibung
eio_lstat() ist Teil der eio-Erweiterung und stellt eine asynchrone, nicht-blockierende Alternative zur PHP-Funktion lstat() dar. Im Gegensatz zu eio_stat() folgt diese Funktion Symlinks nicht, sondern liefert die Statusinformationen des Symlinks selbst – falls $path kein Symlink ist, verhält sie sich identisch zu eio_stat().
Die Funktion wird typischerweise in ereignisgesteuerten Anwendungen (z. B. mit libevent oder ev) eingesetzt, um Dateioperationen durchzuführen, ohne den Prozess zu blockieren. Der eigentliche Ergebnisabruf erfolgt im Callback, der nach Abschluss der I/O-Operation aufgerufen wird.
Der Callback erhält als erstes Argument $data (benutzerdefinierte Daten), als zweites den Rückgabewert der Operation (0 bei Erfolg, -1 bei Fehler) und als drittes ein assoziatives Array mit den Statusinformationen der Datei (analog zu lstat(): dev, ino, mode, nlink, uid, gid, rdev, size, atime, mtime, ctime, blksize, blocks).
Um die Warteschlange der eio-Anfragen tatsächlich abzuarbeiten, muss eio_event_loop() aufgerufen werden oder eine entsprechende Ereignisschleife laufen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $path Pflicht | string | Pfad zur Datei oder zum Symlink, dessen Statusinformationen abgefragt werden sollen. | |
| $pri Pflicht | int | Priorität der Anfrage. Mögliche Werte: EIO_PRI_DEFAULT, EIO_PRI_MIN, EIO_PRI_MAX oder null (entspricht EIO_PRI_DEFAULT). |
|
| $callback Pflicht | callable | Callback-Funktion, die nach Abschluss der Operation aufgerufen wird. Signatur: callback(mixed $data, int $result, array $stat): void. $result ist 0 bei Erfolg oder -1 bei Fehler. $stat enthält die Statusinformationen analog zu lstat(). |
|
| $data | mixed | null | Beliebige benutzerdefinierte Daten, die unverändert an den Callback weitergegeben werden. |
Rückgabewert
eio_cancel() abgebrochen werden kann. Bei einem Fehler wird false zurückgegeben.Beispiele
Statusinformationen eines Symlinks abrufen
<?php
// Setzt eine funktionsfähige eio-Erweiterung voraus
$symlink = '/tmp/mein_symlink';
// Symlink erzeugen (für das Beispiel)
if (!file_exists($symlink)) {
symlink('/etc/hostname', $symlink);
}
eio_lstat($symlink, EIO_PRI_DEFAULT, function ($data, $result, $stat) {
if ($result === 0) {
echo "Typ (mode): " . $stat['mode'] . PHP_EOL;
echo "Größe: " . $stat['size'] . " Bytes" . PHP_EOL;
echo "Zuletzt geändert: " . date('Y-m-d H:i:s', $stat['mtime']) . PHP_EOL;
echo "Kontext: " . $data . PHP_EOL;
} else {
echo "Fehler beim Abrufen des Dateistatus." . PHP_EOL;
}
}, 'mein-kontext');
eio_event_loop();
Unterschied zwischen eio_lstat und eio_stat bei Symlinks
<?php
// eio_lstat liefert Infos über den Symlink selbst,
// eio_stat folgt dem Symlink und liefert Infos über das Ziel.
$symlink = '/tmp/test_link';
$target = '/etc/hostname';
if (!file_exists($symlink)) {
symlink($target, $symlink);
}
$results = [];
eio_lstat($symlink, EIO_PRI_DEFAULT, function ($data, $result, $stat) use (&$results) {
$results['lstat_size'] = $stat['size'];
echo "[lstat] Größe (Symlink selbst): " . $stat['size'] . " Bytes" . PHP_EOL;
}, null);
eio_stat($symlink, EIO_PRI_DEFAULT, function ($data, $result, $stat) use (&$results) {
$results['stat_size'] = $stat['size'];
echo "[stat] Größe (Ziel): " . $stat['size'] . " Bytes" . PHP_EOL;
}, null);
eio_event_loop();
echo "Symlink-Größe != Ziel-Größe: " . ($results['lstat_size'] !== $results['stat_size'] ? 'ja' : 'nein') . PHP_EOL;
// Wichtig · Fallstricke
Achtung: Die eio-Erweiterung ist standardmäßig nicht in PHP enthalten und muss separat installiert werden (pecl install eio). Ohne eine laufende Ereignisschleife (z. B. eio_event_loop()) werden die Callbacks nie ausgeführt.
Der Rückgabewert im Callback-Parameter $result entspricht dem Rückgabewert des zugrundeliegenden POSIX-Systemaufrufs lstat(2). Bei Fehler sollte eio_get_last_error() zur Diagnose verwendet werden.
Da die Funktion Symlinks nicht auflöst, ist sie besonders dann nützlich, wenn man feststellen möchte, ob ein Pfad überhaupt ein Symlink ist (erkennbar am mode-Wert) – ohne dabei dem Symlink zu folgen.