Start · Sprachen · PHP · Referenz · eio_lstat

eio_lstat

Funktion

Ermittelt asynchron den Status einer Datei oder eines Symlinks (ohne den Symlink aufzulösen) und ruft nach Abschluss eine Callback-Funktion auf.

seit PHP 0.0.1dev Kategorie: io

Signatur

eio_lstat(string $path, int $pri, callable $callback, mixed $data = null): resource|false

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

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine eio-Anfrage-Ressource zurück, die z. B. mit 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();
Typ (mode): 40960 Größe: 11 Bytes Zuletzt geändert: 2024-05-01 12:00:00 Kontext: mein-kontext

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;
[lstat] Größe (Symlink selbst): 12 Bytes [stat] Größe (Ziel): 7 Bytes Symlink-Größe != Ziel-Größe: ja

// 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.