Signatur
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
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();
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();
// 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.