Dateien mittels Form und PHP hochladen klappt nicht

  • Hi,

    ich möchte Dateien über den Browser auf den Raspberry Pi hochladen.


    Dazu habe ich nach Anleitung aus dem Internet eine HTML-Datei geschrieben, welche per Form die Datei an ein PHP-Script übergibt.


    Auf einem anderen Webserver nutze ich dies bereits seit einiger Zeit erfolgreich.


    Nun wollte ich dies auch auf dem Raspberry Pi installieren.

    Die Installation von Apache2 und PHP ging ohne Probleme und ich kann HTML- und PHP-Seiten verarbeiten.


    Das Absenden der Datei scheint zu funktionieren, kommt die Datei nicht im Ziel an.

    Typischerweise wird im PHP die Datei mittels der Funktion

    Code
    $tmp_name = $_FILES['datei']['tmp_name'];
    move_uploaded_file($tmp_name,"upload/".$filename)

    von ihrem temporären Landeplatz an die endgültige Stelle kopiert.

    Bei debuggen sehe ich, dass die Variable $tmp_name ins Verzeichnis /tmp/... weist, wo die Datei offensichtlich temporär landen soll.

    Doch dort erscheint sie nicht.


    Das Verzeichnis /tmp erlaubt bei mir allen alles: drwxrwxrwt 9 root root 4096 Dec 26 22:09 tmp


    Woran kann das noch klemmen?

  • flautzmaus

    Changed the title of the thread from “Dateien mittels Form un PHP hochladen klappt nicht” to “Dateien mittels Form und PHP hochladen klappt nicht”.
  • Die php.ini habe ich nicht angepasst.

    Hab das gleiche nochmal auf einem frischinstallierten Raspberry Pi wiederholt, mit gleichem Ergebnis...

    Das Verhalten ist unabhängig von der Dateigröße.


    Hier meine Sourcen, die ich mit nur minimalen Änderungen aus dem WWW abgekupfert habe:

    Meine sendendes Folmular:

    Code
    <form action="upload.php" method="post" enctype="multipart/form-data"> 
      <input type="file" name="dateiupload"> 
      <input type="submit" name="btn[upload]"> 
    </form>

    Und hier das empfangende PHP:

    PHP
    <?php 
    $uploaddir = 'upload/';
    $uploadfile = $uploaddir . basename($_FILES['dateiupload']['name']);
    // move_uploaded_file($_FILES['dateiupload']['tmp_name'], $uploadfile);
    echo '<pre>';
    print_r($_FILES);
    print "</pre>";
    ?>

    In meinem PHP hab ich testweise die Funktion move_uploaded_file() auskommentiert, um nachzusehen, ob die temporäre Datei im /tmp/ Verzeichnis landet,

    tut sie aber nicht...


    Und hier die Debugging-Ausgabe:

    Offensichtlich kommt was an, die Dateigröße ist korrekt und es wird ein temporärer Dateinamen bekanntgegeben.

    • Official Post

    Wenn ich mir das Beispiel unten ansehe, dann steht im $uploaddir der absolute Pfad mit einem Slash vorangestellt...


    http://php.net/manual/de/featu…le-upload.post-method.php

  • tut sie aber nicht...

    Doch, tut sie, wie im Debug output siehst.


    ABER, PHP entfernt diese Datei sofort nach Scriptende, so dass Du sie danach nicht mehr finden kannst.


    Quote from http://de2.php.net/manual/de/features.file-upload.post-method.php

    Wurde die Datei in dem temporären Verzeichnis nicht verschoben oder umbenannt, wird sie am Ende des Requests gelöscht.

    Existiert das Verzeichnis upload/ relativ von Deinem Script aus mit den richtigen Berechtigungen?!

  • Ok, dann mal wieder mein Mantra ;) hilft meistends Fehlern auf die Spur zu kommen...


    Während der Entwicklung beginnt ein Script mit


    PHP
    <?php
    
    ini_set('display_errors', 1);
    error_reporting(-1);
  • Existiert das Verzeichnis upload/ relativ von Deinem Script aus mit den richtigen Berechtigungen?!

    DAS war der richtige Hinweis!!

    Ich dreh noch durch mit den Linux-Rechten... das Verzeichnis "uplaod" braucht natürlich Rechte für die Gruppe www-data!!


    Danke!