Dateien verschieben mit "move_uploaded_file" geht nicht
nilsfad
- php
Hallo liebes Forum,
wieder einmal wende ich mich an euch weil ich nicht weiter weis:
Ich habe ein PHP-Script mitsamt HTML-Formular erstellt, um Dateien auf den Webserver hochzuladen.
Leider speichert PHP die vom Benutzer hochgeladenen Dateien nur temporär unter einem Zufallsnamen in einem temporären Ordner, weswegen ich die Datei per "move_uploaded_file" an einen brauchbaren Ort und vor allem mit brauchbarem Dateinamen verschieben möchte.
Wenn ich innerhalb des Ordners "/tmp" (arbeite auf einem Unix-System) bleibe, macht php das auch. Allerdings sollen die Dateien statt dessen in einen Unterordner des Document-Root des Webservers.
Ich erhalte beim Verschieben mit "move_uploaded_file" jedoch folgende Fehlermeldungen:
Warning: move_uploaded_file(/Library/WebServer/Documents/fileupload/foto.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /Library/WebServer/Documents/fileupload/fileupload.php on line 37
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpo4yGfZ' to '/Library/WebServer/Documents/fileupload/foto.jpg' in /Library/WebServer/Documents/fileupload/fileupload.php on line 37
Jetzt meine Frage: müssen irgendwelche Berechtigungen im Dateisystem gesetzt werden oder muss ich die Konfiguration des Apaches überprüfen? Wo kann man nach dem Fehler suchen?
Wäre sehr dankbar für hilfe, da ich jetzt schon den zweiten Tag erfolglos an dem Problem knabbere.
Gruß
Nils
Du musst, wie bei UNIX-Systemen üblich, für die Ordner chmod-Rechte zum Schreiben setzen. Gegebenenfalls unterbindet deine Servereinstellung diese Funktion aber auch ganz.
Hi!
Leider speichert PHP die vom Benutzer hochgeladenen Dateien nur temporär unter einem Zufallsnamen in einem temporären Ordner,
Wieso leider? Das ist der Weg, wie es funktioniert.
Das ist auch gut so. So können noch eventuelle Prüfungen durchgeführt werden.
weswegen ich die Datei per "move_uploaded_file" an einen brauchbaren Ort und vor allem mit brauchbarem Dateinamen verschieben möchte.
Ja, so geht man beim Dateiupload mit PHP vor.
Ich erhalte beim Verschieben mit "move_uploaded_file" jedoch folgende Fehlermeldungen:
Warning: move_uploaded_file(/Library/WebServer/Documents/fileupload/foto.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /Library/WebServer/Documents/fileupload/fileupload.php on line 37Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpo4yGfZ' to '/Library/WebServer/Documents/fileupload/foto.jpg' in /Library/WebServer/Documents/fileupload/fileupload.php on line 37
Genaugenommen sind das keine Fehlermeldungen, sondern nur "Warnings".
Du kannst die unterdrücken, indem du der Funktion move_uploaded_file() ein @-Zeichen vorranstellst und dann selbst eine Fehlermeldung ausgibst.
Jetzt meine Frage: müssen irgendwelche Berechtigungen im Dateisystem gesetzt werden oder muss ich die Konfiguration des Apaches überprüfen? Wo kann man nach dem Fehler suchen?
Arbeitest du mit OS X? Ist aber eigentlich egal...
Nein, mit dem Apache hat das wohl nichts zu tun.
Wie mir scheint, sind die Rechte einfach nur falsch gesetzt.
Welche Rechte hat denn dein Zielordner?
Der Ordner benötigt Schreibrechte.
Rechte kannst du mit "chmod" vergeben. Das weißt du?
Falls nicht, öffne ein Terminal-Fenster und tippe:
man chmod
Schöner Gruß,
rob
Arbeitest du mit OS X? Ist aber eigentlich egal...
Ja, gut erkannt, Rob. ;-)
Wie mir scheint, sind die Rechte einfach nur falsch gesetzt.
Welche Rechte hat denn dein Zielordner?
Der Ordner benötigt Schreibrechte.Rechte kannst du mit "chmod" vergeben. Das weißt du?
Jaja, das ist mir bekannt. In OSX kann man es auch recht komfortabel mit dem "Finder" einstellen. Habe jetzt mal chmod 777 (vorher hatte der Ordner 755) gemacht - jettzt geht's. Würde die schreibrechte aber nur ungern für "others" so lassen. Kannst du mir statt dessen sagen, unter welcher Gruppe oder welchem Benutzer der Apache ausgeführt wird? ODer wo kann ich das nachgucken?
Einen schönen feiertag
Nils
echo $begrüßung;
Der Ordner benötigt Schreibrechte.
Genauer ausgedrückt: Der Benutzer, der etwas in den Ordner schreiben will, braucht für diesen Ordner Schreibrechte.
Habe jetzt mal chmod 777 (vorher hatte der Ordner 755) gemacht - jettzt geht's. Würde die schreibrechte aber nur ungern für "others" so lassen. Kannst du mir statt dessen sagen, unter welcher Gruppe oder welchem Benutzer der Apache ausgeführt wird? ODer wo kann ich das nachgucken?
Nun, da der Apache in das Verzeichnis schreiben darf, kannst du einfach eine Datei anlegen lassen und dann nachsehen, welchem Benutzer und welcher Gruppe sie zugeordnet ist.
echo "$verabschiedung $name";
Nun, da der Apache in das Verzeichnis schreiben darf, kannst du einfach eine Datei anlegen lassen und dann nachsehen, welchem Benutzer und welcher Gruppe sie zugeordnet ist.
Ja danke, genau das hat mir weitergeholfen. Nach anpassen der "open_basedir" variable in der php.ini funktoniert jetzt alles wie gewünscht. Danke für eure Unterstützung.
Nils