Start · Sprachen · PHP · Referenz · eio_chmod

eio_chmod

Funktion

Ändert asynchron die Datei- oder Verzeichnisberechtigungen über die <code>eio</code>-Erweiterung (non-blocking I/O).

seit PHP 1.0.0 Kategorie: io

Signatur

eio_chmod(string $path, int $mode, int $pri = EIO_PRI_DEFAULT, callable $callback = NULL, mixed $data = NULL): resource

Beschreibung

eio_chmod() ist das asynchrone Äquivalent zur PHP-Funktion chmod() und gehört zur eio-Erweiterung, die auf libeio basiert. Damit lassen sich Dateiberechtigungen ändern, ohne den Prozess zu blockieren – besonders nützlich in ereignisgesteuerten Anwendungen oder bei der Verarbeitung vieler Dateien gleichzeitig.

Die Funktion gibt sofort eine Ressource zurück. Das eigentliche Ergebnis der Operation wird über die $callback-Funktion gemeldet, sobald der Vorgang abgeschlossen ist. Dort kann geprüft werden, ob die Berechtigungsänderung erfolgreich war.

Der $mode-Parameter folgt dem üblichen Unix-Berechtigungsschema (oktal), beispielsweise 0644 für Besitzer lesen/schreiben und alle anderen nur lesen. Der $pri-Parameter steuert die Priorität der asynchronen Anfrage in der Warteschlange.

Die eio-Erweiterung muss explizit installiert und aktiviert sein (pecl install eio). Sie wird häufig zusammen mit Event-Loop-Bibliotheken wie libevent oder dem React-Framework verwendet.

Parameter

Name Typ Default Beschreibung
$path Pflicht string Pfad zur Datei oder zum Verzeichnis, dessen Berechtigungen geändert werden sollen.
$mode Pflicht int Die neuen Berechtigungen als oktale Zahl, z. B. 0644 oder 0755. Muss als Oktalzahl angegeben werden (mit führender 0).
$pri int EIO_PRI_DEFAULT Priorität der Anfrage. Mögliche Werte: EIO_PRI_DEFAULT, EIO_PRI_MIN, EIO_PRI_MAX. Beeinflusst die Reihenfolge in der Warteschlange.
$callback callable NULL Rückruffunktion, die nach Abschluss der Operation aufgerufen wird. Signatur: function(mixed $data, int $result, resource $req): void. $result ist 0 bei Erfolg oder -1 bei Fehler.
$data mixed NULL Beliebige Benutzerdaten, die unverändert an die Callback-Funktion weitergegeben werden.

Rückgabewert

Typ
resource
Beschreibung
Gibt bei Erfolg eine eio-Anfrage-Ressource zurück, die z. B. mit eio_cancel() abgebrochen werden kann. Gibt false zurück, wenn die Anfrage nicht erstellt werden konnte.

Beispiele

Datei-Berechtigungen asynchron auf 0644 setzen

<?php
// eio-Erweiterung muss installiert sein: pecl install eio

$datei = '/tmp/beispiel.txt';
file_put_contents($datei, 'Testinhalt');

eio_chmod($datei, 0644, EIO_PRI_DEFAULT, function($data, $result, $req) {
    if ($result === 0) {
        echo "Berechtigungen erfolgreich auf 0644 gesetzt für: " . $data . PHP_EOL;
    } else {
        echo "Fehler beim Setzen der Berechtigungen: " . eio_get_last_error($req) . PHP_EOL;
    }
}, $datei);

eio_event_loop();
Berechtigungen erfolgreich auf 0644 gesetzt für: /tmp/beispiel.txt

Verzeichnisberechtigungen mit benutzerdefinierter Priorität ändern

<?php
// Verzeichnis erstellen und Rechte asynchron setzen
$verzeichnis = '/tmp/test_eio_dir';
if (!is_dir($verzeichnis)) {
    mkdir($verzeichnis);
}

$kontext = ['pfad' => $verzeichnis, 'rechte' => '0755'];

eio_chmod($verzeichnis, 0755, EIO_PRI_MAX, function($data, $result, $req) {
    if ($result === 0) {
        printf(
            "Verzeichnis '%s' erfolgreich auf %s gesetzt.\n",
            $data['pfad'],
            $data['rechte']
        );
    } else {
        echo "Fehler: " . eio_get_last_error($req) . PHP_EOL;
    }
}, $kontext);

eio_event_loop();
Verzeichnis '/tmp/test_eio_dir' erfolgreich auf 0755 gesetzt.

// Wichtig · Fallstricke

Sicherheitshinweis: Übergeben Sie niemals unkontrollierte Benutzereingaben als $path, da sonst beliebige Dateien des Systems verändert werden könnten (Path-Traversal-Angriff). Validieren und bereinigen Sie Pfade stets vor der Verwendung.

Oktalschreibweise: Der $mode-Parameter muss als PHP-Oktalzahl angegeben werden (z. B. 0644), nicht als String '644' – andernfalls werden falsche Berechtigungen gesetzt.

Verfügbarkeit: eio_chmod() ist nur unter Unix-ähnlichen Betriebssystemen verfügbar. Unter Windows wird die eio-Erweiterung nicht unterstützt. Die Funktion erfordert die Installation via PECL: pecl install eio.

Nach dem Aufruf muss eio_event_loop() ausgeführt werden, damit die ausstehenden asynchronen Anfragen tatsächlich abgearbeitet und die Callbacks aufgerufen werden.