Veröffentlicht: 09.11.2010

PHP: Probleme mit Datei Upload unter Windows

Nachdem ich vor ein paar Tagen, im Rahmen des ”Developers Shame Day”, in meiner Giftgrube gewühlt und ein Code Schnipsel aus vergangenen Tagen veröffentlicht habe, kommt der heutige Beitrag wieder aus der Richtung “Was mache ich, wenn … ?“.

Während den Arbeiten an einem Projekt, testen wir die Seiten nicht nur mit verschiedenen Browsern, sondern auch mit verschiedenen Server Betriebssystemen. Wir wollen so gewährleisten, dass der Kunde einen Server seiner Wahl nutzen kann, ohne auf ein Feature verzichten zu müssen.

Ein Kollege sprach mich, nach solch einem Testlauf, darauf an, dass er Probleme mit Dateien hat, die er mittels Datei Upload in sein Windows Testsystem lädt. Beim Zugriff auf diese Dateien, wird er von Windows darauf aufmerksam gemacht, das er nicht die benötigten Rechte dazu besitzt.

Was ist passiert?

PHP speichert jede hochgeladene Datei in einem temporären Verzeichnis zwischen und gibt diese Information an das eigentliche PHP Skript weiter. Durch die Ablage im temporären Verzeichnis, gehen die Zugriffsrechte des Verzeichnisses auf die Datei über und bleiben auch nach evtl. Kopiervorgängen erhalten.

Sofern ihr den Pfad zum upload_tmp_dir nicht angepasst habt, wird das temporäre Verzeichnis eurer Windows Installation (C😕Windows\Temp) genutzt und für das habt ihr normalerweise keine Rechte.

Was kann man machen?

Um das Problem dauerhaft, und ohne Anpassung irgendwelcher Skripte zu beheben, stehen euch die folgenden drei Möglichkeiten zur Verfügung.

Möglichkeit 1:

Gebt dem Benutzer, der die Dateien weiterverarbeiten soll, die entsprechenden Rechte für das temporäre Verzeichnis. Zukünftige Dateien erben diese dann ebenfalls.

Möglichkeit 2:

Ändert in eurer php.ini den Wert von upload_tmp_dir und tragt ein Verzeichnis ein, für das ihr Zugriffsrechte habt.

Möglichkeit 3:

Legt euer Web Root und das temporäre Verzeichnis auf verschiedene Partitionen/Laufwerke. Durch das Kopieren auf eine andere Partition werden die Zugriffsrechte für die Datei automatisch erweitert.