PHP-Frust

PHP gehört wirklich nicht zu meinen Lieblings-Sprachen. Und es wird mir auch zunehmend unsympathischer.

Neuestes Beispiel: ein Kunde hat ein Problem mit einem Script, welches unter anderem irgendwo Dateien auf seinen Webspace hochlädt (per PHP-File-Upload). Die neu erstellten Dateien haben aber “nur” die Rechte 0600, obwohl diese eigentlich 0644 haben sollten. umask() ist richtig gesetzt, ein explizites chmod() nach dem Upload ist nicht möglich (es handelt sich um ein gekauftes, codiertes Script), und bei seinem bisherigen Webhoster hat das Script nach Angaben des Kunden wohl einwandfrei funktioniert.

Andere Baustelle: eine Kundin zieht eine Contenido-CMS-Website auf einen Webspace bei uns um. Gleiches Problem: nach Uploads sind die Rechte immer falsch. In diversen Contenido-Foren weisen deren Entwickler die Notwendigkeit eines chmod() nach dem move_uploaded_file()-Aufruf von sich - “der Provider ist für eine anständige umask() verantwortlich”.  Wenn das Problem nur in der umask() bestehen würde…
Nun haben wir die Wurzel allen Übels identifiziert: PHP selbst. :grr:

Bug #42291: wird eine Datei mit PHP hochgeladen und mit move_uploaded_file() auf ein Ziel verschoben welches im gleichen Filesystem wie die temporäre Datei liegt (=>rename), dann werden die Rechte fälschlicherweise auf 0600 gesetzt statt auf 0644. Da bei uns aus Sicherheitsgründen jeder Kunde sein eigenes tmp-Verzeichnis innerhalb seines geschützten Kundenverzeichnisbaums hat (also im gleichen Filesystem), tritt genau dieser Fall ein.

Der Workaround für die betroffenen Kunden ist also, diesen ein tmp-Verzeichnis auf einer anderen Partition einzurichten… ein kurzer Test hat das bestätigt.

7 Bemerkungen zu “PHP-Frust”

  1. Ösicoder

    Alleine bei der Bezeichnung Bug Nr. 42291 müsste einem schon schwindlig werden :)
    40000 Bugs. Nun gut bei ASP weiß man es halt nicht dort werden die Probleme wenn überhaupt still und leise gelöst. :)

  2. Morty

    @Ösi: Oder man findet nach Stunden des Suchens in einer Newsgroup den Hinweis, dass sich die Funktion wohl tatsächlich nicht so verhält wie in der Dokumentation beschrieben, dieses Problem aber wahrscheinlich auch nicht behoben werden wird.

  3. Morty

    P.s: Das Posting das es tatsächlich ein Bug ist war von einem MS-Mitarbeiter und zu dem Zeitpunkt schon zwei Jahre alt.

  4. Klaus Keppler

    @Morty: von welchem Bug sprichst Du? #42291 gibt’s erst seit August.

    @Ösi: naja, 40.000 Fehlermeldungen - nicht alles war auch wirklich ein Fehler. Und PHP ist ja auch schon ein paar Tage auf’m Markt… ;)

  5. Jürgen Jaritsch

    Zusätzlich bleibt zu sagen: tritt nur ohne mod_php auf ;) .

  6. Morty

    Das Bezog sich auf “Nun gut bei ASP weiß man es halt nicht dort werden die Probleme wenn überhaupt still und leise gelöst.” War ein Bug in der inet.dll, der dank MS in keiner Bug-DB aufgetaucht ist. Hat mich zwei Tage gekostet, herauszufinden, das es ein Bug ist und nicht ich zu blöd bin.

  7. Tobias Daur

    Für eine neu angelegte Datei die Rechte zu setzen, gehört bei einer Programmierung IMHO dazu, egal in welcher Sprache. Daß dies (wie aus Deinem Beispiel hervorgeht) Contenido und (wie aus dem Bugreport hervorgeht) Joomla falsch und TYPO3 richtig macht, wundert mich nicht. Und zeigt eben dies: Nicht die Sprache, der Entwickler ist entscheidend für die Qualität des Ergebnisses.
    Die Zahl der Bugreports zeigt lediglich, daß es sich bei PHP um ein umfangreiches Projekt mit einer großen und aktiven Nutzergemeinde handelt. Könnte mach anderer Sprache gut tun.

    Tobias

Einen Kommentar schreiben