IIS mit PHP Berechtigungsfehler beim Upload von Dateien

Unter Windows mit einem IIS und PHP habe ich soeben STUNDEN damit zugebracht, herauszufinden warum meine hochgeladenen Bilder (und Dateien) nicht die erforderlichen Berechtigungen für eine korrekte Anzeige aus dem Upload-Ordner erben. „Serverfehler 500“ sagt der IIS dazu ja auch nur und Bilder werden nicht angezeigt.

Das Problem tritt nur auf, wenn man PHP zum Hochladen nutzt. .NET hat das Problem generell nicht.

PHP legt hochgeladene Dateien nämlich in einem temporären Verzeichnis ab (Default: %windir%\Temp) und VERSCHIEBT diese danach ins Zielverzeichnis. Wenn eine Datei in dem temporären Upload-Verzeichnis angekommen ist, erbt sie (korrekterweise) erst einmal die NTFS-Berechtigungen dieses Verzeichnisses. Verschieben der Datei auf dem selben Laufwerk erhält dann aber die Berechtigungen dieser Datei und diese erbt die Berechtigungen des Ziel-Webverzeichnisses nicht. Verschiebt man über Volumengrenzen hinweg, tritt dieser Fehler nicht auf: Neue Dateien erben dort die NTFS-Berechtigungen des Zielordners. Das ist so, weil verschiebeoperationen eines Volumes nur den Pointer einer Datei ändern, die anhängenden ACLs und Metadaten aber nicht.

Lösung

Der einfachste Weg dieses Problem zu beheben besteht darin, die Berechtigungen der Ziel-Webverzeichnisses auf das temporäre Upload-Verzeichnis zu übertragen, bzw. die ACLs zu ergänzen. Einfach die Berechtigungen des Webverzeichnisses zum TEMP-Verzeichnis hinzufügen.

  1. Das temporäre Upload-Verzeichnisses in der php.ini-Datei in dem Parameter „upload_tmp_dir“ festgelegt. Ist kein Eintrag festgelegt, verwendet PHP %TEMP%
  2. In diesem Ordner alle Berechtigungen des Ziel-Webordners hinzufügen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.