Ergebnis 1 bis 5 von 5
  1. #1

    Unhappy [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:
    Warning: 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
    Nur ich finde den Fehler nicht

    Hier ist das Formular:
    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&ouml;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>
    und hier ist das php script aus der upload.php:

    PHP-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);

    ?>
    Danke, dass ihr euch Zeit genommen hast das alles zu lesen
    Also, was mache ich falsch?

    Danke schonmal!
    Geändert von dermetfan (26. 01. 2012 um 23:52 Uhr) Grund: vertippt

  2. #2
    Mitglied
    Registriert seit
    Mar 2007
    Beiträge
    2.700

    Standard 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.

  3. #3
    Nerd

    Board:Crew

    Avatar von Kugelfisch23
    Registriert seit
    Oct 2007
    Ort
    Im Ozean
    Beiträge
    16.811

    Standard 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
    PHP-Code:
    $filename=date("H:s:i")." | ".$_FILES["1"]["name"].$_FILES["2"]["name"].$_FILES["3"]["name"].$_FILES["4"]["name"].$_FILES["5"]["name"]; 
    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.

    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.

  4. #4
    dermetfan

    (Threadstarter)


    Registriert seit
    Jul 2010
    Beiträge
    16

    Smile 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

  5. #5
    Nerd

    Board:Crew

    Avatar von Kugelfisch23
    Registriert seit
    Oct 2007
    Ort
    Im Ozean
    Beiträge
    16.811

    Standard Re: [PHP] Problem mit move_downloaded_files();

    Zitat Zitat von dermetfan Beitrag anzeigen
    P.S.: Bin zu doof um den Bedanken-Button zu finden, wo is der oder gibts das hier nich
    Nein, der Bedankomat ist nur in einigen ausgewählten Foren aktiv, wozu das Webtechnik-Forum nicht gehört. Unabhängig davon ist eine Rückmeldung, ob die Vorschläge zum Erfolg geführt haben, natürlich sehr wünschenswert.

  6.  
     
     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •