Raketenwissenschaftler: (Nachtrag, Erläuterung)

Beitrag lesen

umask nutzt die führende Null nicht zur Anzeige einer Oktalzahl; stattdessen erwartet umask drei oder vier Integers, das erste Zeichen ist dabei optional und wird für die seltener genutzten Special-Permissions (setuid, setgid und sticky) genutzt.

Um 02:00 Uhr morgens erliegt man wegen des Nachlassens der Aufmerksamkeit oft kleinen Irrtümern.

Was Du beschreibst gilt durchaus, aber eben für den 40 oder 50 Jahre alten(¹) Linux/Unix-Befehl "umask" in einer Linux/Unix, NexTSTEP, OPENSTEP oder MacOS-Shell.

Der erwartet entweder eine Symbolfolge (a.k.a. 'String') (r.g. 'u=rwx,g=rw,o=') oder eine stets oktal angegebene, ganze Zahl (640) als Argument für die zu setzenden, zu erteilenden oder zu entziehenden Rechte.

PHP indes vermutet bei einer Folge von Ziffern ohne führende Symbole (0, 0x, 0b) oder gar Stringbegrenzern (', ") einen Integer und reicht den so an die Funktion umask() weiter. Ein Oktalwert wird in PHP durch die führende Null vor den Ziffern als Oktalwert (und das Fehlen von Stringbegrenzern) deklariert. Du könntest ebensogut heaxdezimal (beginnend mit 0x) oder binär (beginnend mit 0b) notierte Werte übergeben..

Versuche mal:

<?php
echo 0b1000; echo PHP_EOL;
echo 010; echo PHP_EOL;
echo 0x8; echo PHP_EOL;
?>
# Ergebnis ist stets:
# 8

Falls Du es probieren willst helfen Dir die Funktionen decoct(), octdec(), decbin(), bindec() und base_convert() aus dem Handbuch um die Darstellungsformen zu ermitteln und dann im Programm zu notieren.

Allerdings liefern bzw. erwarten diese eine oktale (dezimale, binäre) Stringdarstellung. Funktionen, die einen Integer als Argument erwarten, werden sich vorraussichtlich beschweren wenn Du denen statt dessen einen von decoct(), decbin() oder base_convert() gelieferten String übergibst.


  1. Damalige, mangels Erfahrung "verbrochene" Entwurfsprinzipien für Programmiersprachen gelten heute vielen als "seltsam". Die Entwicklung und Beliebtheit so mancher einst berühmten Programmiersprache (z.B. Perl) leidet auch darunter.