Signatur
Beschreibung
Die Funktion umask() ändert die aktuelle Prozess-umask auf den angegebenen Wert. Die umask bestimmt, welche Berechtigungen bei der Erstellung neuer Dateien und Verzeichnisse abgezogen werden. Sie wird bitweise per AND-NOT auf die angeforderten Berechtigungen angewendet, bevor das Dateisystem sie setzt.
Wird umask() ohne Argument aufgerufen, gibt sie lediglich die aktuelle umask zurück, ohne sie zu verändern. Mit einem Argument setzt sie die neue umask und gibt den alten Wert zurück, sodass dieser wiederhergestellt werden kann.
Typische Anwendungsfälle sind das temporäre Anpassen der Dateiberechtigungen vor dem Anlegen von Dateien oder Verzeichnissen mit mkdir() oder file_put_contents(), um sicherzustellen, dass die erstellten Ressourcen die gewünschten Zugriffsrechte erhalten – unabhängig von der systemweiten Standardkonfiguration.
Achtung: Die umask gilt global für den gesamten PHP-Prozess. Änderungen wirken sich auf alle nachfolgenden Dateioperationen aus, bis die umask zurückgesetzt wird. Bei Webservern mit persistenten Prozessen (z. B. PHP-FPM) sollte die umask daher immer nach Gebrauch wiederhergestellt werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $mask | int | Die neue umask als Oktalzahl, z. B. 0022. Wird das Argument weggelassen, bleibt die umask unverändert und nur der aktuelle Wert wird zurückgegeben. |
Rückgabewert
mask-Argument übergeben, wird die aktuelle umask zurückgegeben.Beispiele
Aktuelle umask auslesen ohne Änderung
<?php
$current = umask();
echo 'Aktuelle umask: ' . decoct($current) . PHP_EOL;
?>
umask temporär ändern und danach wiederherstellen
<?php
$verzeichnis = '/tmp/mein_verzeichnis';
// Aktuelle umask merken und neue setzen (keine Berechtigungen entfernen)
$alte_umask = umask(0000);
// Verzeichnis mit vollem Berechtigungssatz 0777 anlegen
if (mkdir($verzeichnis, 0777)) {
echo 'Verzeichnis angelegt.' . PHP_EOL;
echo 'Berechtigungen: ' . decoct(fileperms($verzeichnis) & 0777) . PHP_EOL;
}
// umask wieder auf alten Wert zurücksetzen
umask($alte_umask);
?>
Datei mit eingeschränkten Rechten erstellen
<?php
$datei = '/tmp/sicher.txt';
// Nur Eigentümer darf lesen/schreiben (0177 maskiert Gruppe und Andere)
$alte_umask = umask(0177);
file_put_contents($datei, 'Geheimer Inhalt');
$rechte = decoct(fileperms($datei) & 0777);
echo 'Dateiberechtigungen: ' . $rechte . PHP_EOL; // erwartet: 600
umask($alte_umask);
?>
// Wichtig · Fallstricke
Globale Wirkung: Die umask ist ein prozessweiter Zustand. In Umgebungen mit gemeinsam genutzten Prozessen (z. B. PHP-FPM, Apache mod_php) sollte die ursprüngliche umask nach dem Eingriff immer wiederhergestellt werden, um unerwünschte Seiteneffekte auf andere Anfragen zu verhindern.
Windows: Unter Windows ist umask() nur eingeschränkt funktionsfähig. Der einzige unterstützte Wert ist 0200 (schreibgeschützte Dateien). Andere Bits werden ignoriert.
Parallelität: In Multithreading-Umgebungen (z. B. mit dem Thread-Safety-Modell von PHP) kann die globale umask zu Race Conditions führen. Stattdessen sollte die Berechtigungsvergabe nach dem Erstellen von Dateien mit chmod() erfolgen.