-
26. 01. 2012, 23:48 #1dermetfan
- Registriert seit
- Jul 2010
- Beiträge
- 16
[PHP] Problem mit move_downloaded_files();
Hi,
ich habe ein Problem mit der Funktion move_downloaded_files(); in PHP. Also, ich habe ein Formular erstellt, mit dem man eine oder mehrere Dateien hochladen kann. Wenn man den submit-button drückt, werden die Dateien hochgeladen und die Datei upload.php geöffnet (form action="upload.php"). Nun soll upload.php folgendes tun:
- falls nötig den Ordner "Bio/Annika/".date("Y").date("m").date("d") erstellen (klappt)
- die hochgeladenen Dateien in diesen Ordner verschieben (klappt nicht) und dabei umbenennen (klappt).
Es kommen folgende Fehlermeldungen:
Nur ich finde den Fehler nichtWarning: move_uploaded_file(archiv/Bio/Annika/2012/01/26/23:59:29 | lc.PNG) [function.move-uploaded-file]: failed to open stream: No such file or directory in /users/dermetfan/www/teamwork/upload.php on line 20
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/users/dermetfan/temp/phphfAPuQ' to 'archiv/Bio/Annika/2012/01/26/23:59:29 | lc.PNG' in /users/dermetfan/www/teamwork/upload.php on line 20
Hier ist das Formular:
und hier ist das php script aus der upload.php:HTML-Code:<form action="upload.php" method="post" enctype="multipart/form-data"> Wer du bist:<br> <select name="uploader" size="5"> <option>Ann-Kathrin</option> <option>Anna</option> <option>Anne</option> <option>Annika</option> <option>Carina</option> <option>Caroline</option> <option>und so weiter</option> </select> <br><br>Welches Fach:<br> <select name="fach" size="5"> <option>Politik</option> <option>Französisch</option> <option>Deutsch</option> <option>und so weiter</option> </select> <br><br> <textarea name="infos" rows="7" cols="50"> Text in der Textarea (bla) </textarea> <br><input type="file" name="1"> <br><input type="file" name="2"> <br><input type="file" name="3"> <br><input type="file" name="4"> <br><input type="file" name="5"> <br><input type="submit" value="Nett sein ;)"> </form>
Danke, dass ihr euch Zeit genommen hast das alles zu lesenPHP-Code:<?php
chdir("archiv/".$_POST["fach"]."/".$_POST["uploader"]);
mkdir(date("Y"));
chmod(date("Y"), 0777);
chdir(date("Y"));
mkdir(date("m"));
chmod(date("m"), 0777);
chdir(date("m"));
mkdir(date("d"));
chmod(date("d"), 0777);
$dir=$_POST["fach"]."/".$_POST["uploader"]."/".date("Y")."/".date("m")."/".date("d");
$filename=date("H:s:i")." | ".$_FILES["1"]["name"].$_FILES["2"]["name"].$_FILES["3"]["name"].$_FILES["4"]["name"].$_FILES["5"]["name"];
move_uploaded_file($_FILES["1"]["tmp_name"], "archiv/".$dir."/".$filename);
move_uploaded_file($_FILES["2"]["tmp_name"], "archiv/".$dir."/".$filename);
move_uploaded_file($_FILES["3"]["tmp_name"], "archiv/".$dir."/".$filename);
move_uploaded_file($_FILES["4"]["tmp_name"], "archiv/".$dir."/".$filename);
move_uploaded_file($_FILES["5"]["tmp_name"], "archiv/".$dir."/".$filename);
?>
Also, was mache ich falsch?
Danke schonmal!Geändert von dermetfan (26. 01. 2012 um 23:52 Uhr) Grund: vertippt
-
27. 01. 2012, 10:50 #2Mitglied
- Registriert seit
- Mar 2007
- Beiträge
- 2.700
Re: [PHP] Problem mit move_downloaded_files();
Schau mal genau hin, in welchem Verzeichnis du mit deinen ganzen chdir()-Aufrufen gelandet bist. Kleiner Tipp, du bist bereits im Zielordner (zumindest fast, du bist erst im Monatsordner, da fehlt allerdings nur noch ein chdir()-Aufruf). Da du das Ziel für den Upload als relativer Pfad angegeben hast, wird dieser Pfad relativ zum aktuellen Pfad berechnet. Lass einfach das "archive/$dir/"-Zeugs beim Aufruf von move_uploaded_file() weg, dann stimmt der Pfad.
-
27. 01. 2012, 11:38 #3
Re: [PHP] Problem mit move_downloaded_files();
Abgesehen vom (abhängig vom Datei- und Betriebssystem) ggf. problematischen `|`-Zeichen im Dateinamen dürfte das Problem sein, dass zum Zeitpunkt der Ausführung von move_uploaded_file() relativ zum aktuellen Verzeichnis keine Verzeichnisstruktur archiv/Bio/Annika/2012/01/26/ existiert. Beachte, dass sich die relative Pfadangabe auf das aktuelle Verzeichnis bezieht, welches du zuvor über chdir()-Aufrufe bereits geändert hast. Zum Zeitpunkt des move_uploaded_file()-Aufrufs ist das aktuelle Verzeichnis relativ zum ursprünglichen Arbeitsverzeichnis archiv/Bio/Annika/2012/01/.
Abgesehen davon generierst du einmalig einen Dateinamen
und verschiebst dann alle Dateien an diese Stelle. Das ist kaum sinnvoll, wenn mehrere Dateien hochgeladen wurden. Erzeuge für jede Datei einen individuellen Namen.PHP-Code:$filename=date("H:s:i")." | ".$_FILES["1"]["name"].$_FILES["2"]["name"].$_FILES["3"]["name"].$_FILES["4"]["name"].$_FILES["5"]["name"];
Abgesehen davon solltest du beachten, dass dein Skript diverse Schwachstellen aufweist. Insbesondere ist es möglich, PHP-Dateien in beliebige Verzeichnisse hochzuladen und dadurch beliebigen PHP-Code auf deinem Server zur Ausführung zu bringen. Du solltest Benutzereingaben unbedingt überprüfen, bevor du sie als Pfad-Bestandteile nutzt - und mindestens die Dateiendung der hochgeladenen Dateien überprüfen, bevor du sie öffentlich zugänglich ablegst. Lasse nur Dateien mit bestimmten, bekanntermassen harmlosen Dateiendungen zu, die dein Server nicht ausführt.
Edit: Ok, Tab nicht aktualisiert. Die zusätzlichen Hinweise gelten jedoch nach wie vor.Geändert von Kugelfisch23 (27. 01. 2012 um 11:42 Uhr) Grund: Zeitliche Überschneidung.
-
27. 01. 2012, 15:19 #4dermetfan
(Threadstarter)
- Registriert seit
- Jul 2010
- Beiträge
- 16
Re: [PHP] Problem mit move_downloaded_files();
Danke an euch! Das Skript läuft jetzt einwandfrei und ich habs kapiert ^^
wegen der Sicherheit: ich habe auch noch vor, nur bestimmte Dateitypen zuzulassen, ich habs nur noch nicht gemacht. Das Skript sollte erstmal laufen.
P.S.: Bin zu doof um den Bedanken-Button zu finden, wo is der oder gibts das hier nich
-
27. 01. 2012, 16:40 #5
-


Zitieren

mehr lesen...







Occupy Kiel: Massiver Sachschaden...
Heute, 20:15 in gulli:news