Moin Moin!
Und warum zum Geier prüfst Du nicht den Rückgabewert von mkdir()?
Oh mann, scheinbar mag ich es wohl kompliziert, danke für den Hinweis ;-)
(Fast) JEDER Syscall hat ein definiertes Fehlerverhalten, sehr oft wird ein besonderer Wert zurückgegeben, oft 0 oder negative Werte; gelegentlich gibt ein Syscall normalerweise 0 zurück, im Fehlerfall von 0 verschiedene Werte.
Die über der Syscall-Schnittstelle liegende libc verpackt die Syscalls, macht sie gelegentlich etwas hübscher oder kompatibel zu älteren Versionen, benimmt sich aber im großen und ganzen genauso.
Das darüber liegende PHP macht noch einmal das gleiche, ebenso wie viele andere auf C aufbauenden Sprachen. Java schmeißt als größere Ausnahme von der Regel meistens eine Exception, wenn etwas schiefgeht.
Dein Job als Code-Sklave ist es, auf das Fehlerverhalten zu reagieren. Wie einzelne Funktionen im Fehlerfall reagieren, steht in der Dokumentation.
Mal so am Rande: Hast Du mkdir im PHP-Manual gelesen? Dann hättest Du Dir das chmod komplett sparen können.
Das hatte ich gelesen, aber mit
mkdir($thumbs_folder, 0777);
waren die Rechte trotzdem nur bei 0755. Das liegt wohl an umask, dessen Sinn ich noch nicht ganz durchschaut habe.
Ganz einfach: Im Normalfall schreibt man (auf Unix-Systemen) Software so, dass Dateien (plain file, directory, socket, fifo, usw.) immer mit maximalen Rechten angelegt werden, d.h. Verzeichnisse mit 0777, Dateien mit 0666. Der Kernel macht dann noch eine Und-Verknüpfung mit dem negierten umask-Wert, bevor er wirklich mit dem Wert arbeitet. Normalerweise ist das System so eingestellt, dass es einen umask-Wert 022 benutzt, damit werden Dateien mit 0644 und Verzeichnisse mit 0755 angelegt. Wenn Du als paranoider Benutzer einmal in der Shell den umask-Wert umstellst, z.B. auf 077, gilt das für alle ab dem Zeitpunkt gestarteten Programme, d.h. ohne ein Bit am Code zu ändern, werden Dateien dann mit 0600, Verzeichnisse mit 0700 angelegt.
Beschäftige mich erst seit Kurzem mit php...
Das ist keine Entschuldigung, die Doku nicht zu lesen.
Per ftp habe ich versucht, das Setuid-Bit des Bilderverzeichnisses zu setzen. Damit gehört das darin erstellte thumbs-Verzeichnis automatisch dem selben Benutzer, oder?
Oder: "The setuid permission set on a directory is ignored on UNIX and Linux systems. FreeBSD can be configured to interpret it analogously to setgid, namely, to force all files and sub-directories to be owned by the top directory owner."
Erfolgreich war ich damit aber nicht, ist daran auch der Safe-Mode schuld? (--> In addition, you cannot set the SUID, SGID and sticky bits)
Der Safe Mode verhindert, dass Du die drei Bits per PHP setzen kannst. An der Wirksamkeit bzw. Unwirksamkeit der Bits ändert er nichts.
Alexander
--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".