Fileupload: $_FILES leer

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Fileupload: $_FILES leer

    Hallo,

    ich möchte mit Hilfe eines HTTP-Formulars eine Datei auf den Server laden lassen. Nun kommt die hochzuladende Datei aber leider nicht am Server an, das eigentlich von mir erwartete Array $_FILES bleibt immer leer. Hier mal das Formular, über das die zu transferierende Datei ausgewählt und abgeschickt wird:

    Code:
    <form action="index.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="80000">
    <input type="file" name="uploadfile">
    <input type="submit" name="submit" value="upload">
    </form>
    Leider kommen die Werte zwar im $_POST an, das Array $_FILES bleibt aber immer leer. Ein print_r($_POST) im Kopf der index.php gibt folgendes Ergebnis:

    Code:
    Array
    (
        [MAX_FILE_SIZE] => 80000
        [uploadfile] => C:\blablablubb\images\bullet.gif
        [submit] => upload
    )
    Ich hab jetzt schon die php.ini auf potentielle Upload-Einschränkungen durchsucht, aber leider auch nichts gefunden. Ich verwende Xampp 1.4.9 unter Windows XP (SP2): Apache 2, PHP-Version 4.3.9 - hier noch die entsprechenden Einträge in der php.ini:

    Code:
    ;;;;;;;;;;;;;;;;
    ; File Uploads ;
    ;;;;;;;;;;;;;;;;
    
    ; Whether to allow HTTP file uploads.
    file_uploads = On
    
    ; Temporary directory for HTTP uploaded files (will use system default if not
    ; specified).
    upload_tmp_dir = "C:\xampp\xampp\tmp"
    
    ; Maximum allowed size for uploaded files.
    upload_max_filesize = 16M
    Das angegebene temporäre Upload-Verzeichnis existiert und ist auch beschreibbar. Hier taucht allerdings keine der hochgeladenen Dateien auf, nur Sessiondaten, da das Verzeichnis auch als session.save_path verwendet wird.

    Mir fällt nun partout nichts mehr ein, was mein Upload-Problem verursachen könnte. Hat jemand von Euch noch eine Idee? Bin für jeden Hinweis echt dankbar!

  • #2
    sieht richtig aus.. validiere die seite mit dem w3c validator und schau mit einem http-sniffer, was tatsächlich verschickt wird.

    Kommentar


    • #3
      Der HTML-Code sieht richtig aus, da gebe ich penizillin Recht. Aber der Dump von $_POST macht mich stutzig. Wie kommt es, dass der lokale Pfad der hochgeladenen Datei als Variable uploadfile auftaucht?

      Kommentar


      • #4
        afaik ist das bei ie "normal", mozilla dagegen schickt nur den dateinamen.

        Kommentar


        • #5
          Hast du mal error_reporting auf E_ALL gesetzt?

          Ist das Verzeichnis des Upload-TMPs für den Webserver beschreibbar? Hast du mal verschiedene Browser ausprobiert?
          Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
          var_dump(), print_r(), debug_backtrace und echo.
          Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
          Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
          Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

          Kommentar


          • #6
            War da nicht mal was das bei ner älteren PHP-Version anstatt von Files, $HTTP_POST_FILES genommen werden musste?

            Kommentar


            • #7
              4.3.9 ist nicht wirklich alt
              Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
              var_dump(), print_r(), debug_backtrace und echo.
              Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
              Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
              Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

              Kommentar


              • #8
                Ok sorry, hab ich voll übersehen das er da oben die Version hatte. Mein Fehler!

                Kommentar


                • #9
                  Original geschrieben von Shurakai
                  Hast du mal error_reporting auf E_ALL gesetzt?
                  Ja, hab ich: "Notice: Undefined index: file in c:\..."
                  Wenn ich das richtig verstehe, bedeutet das nur, daß keine Datei gefunden wurde. Was ja auch stimmt, da die Datei im Temp. Upload-Verzeichnis gar nicht ankommt.


                  Ist das Verzeichnis des Upload-TMPs für den Webserver beschreibbar? Hast du mal verschiedene Browser ausprobiert?
                  Das Verzeichnis ist für den Server beschreibbar, es wird auch als Session-Pfad verwendet. Die jeweiligen Session-Dateien finde ich auch in dem Verzeichnis.

                  Browser habe ich IE 7 und Firefox probiert, beide liefern das gleiche Ergebnis. Ich hab sogar schon mal die XP-Firewall und die von meinem Virenscanner ausgeschaltet, aber alles ohne Wirkung.

                  Ich hab mir jetzt mal ein anderes Upload-Script heruntergeladen, das im Prinzip genauso funktioniert, wie meines. Am Webserver läuft das auch, nur auf meinem lokalen Webserver tut sich ebenfalls nichts. Es sieht also alles danach aus, als ob das mit meiner lokalen Systemumgebung zu tun hat. Aber mir gehen langsam die Ideen aus, woran ich noch drehen könnte.

                  @onemorenerd:
                  penizillin hat Recht, die Pfadangabe wird nur im IE mitgeliefert, FF schickt nur den Dateinamen.

                  Vielen Dank jedenfalls schon mal für Eure Unterstützung, für weitere Ideen, was ich noch versuchen könnte bin ich sehr dankbar...

                  Kommentar


                  • #10
                    die fehlermeldung lässt vermuten, dass du mehr code hast, als du zeigst.

                    Kommentar


                    • #11
                      Hallo Penizillin,

                      ja, es gibt mehr Code, allerdings nichts relevantes. Die Notice-Meldung bezieht sich auf die Weiterverarbeitung des $_FILES-Array, da das Array aber schon bei Start der index.php leer ist, habe ich auf das Posten der nachfolgenden Funktion verzichtet.

                      Der Vollständigkeit halber, hier die Zeile, die eine Notice-Rückmeldung erzeugt:
                      Code:
                      if(is_uploaded_file($_FILES["uploadfile"]["tmp_name"]))
                      Wie gesagt, $_FILES ist bereits in der ersten Zeile der index.php leer, $_POST enthält jedoch alle erwarteten Werte.

                      Ich werde jetzt mal das ganze Zeug auf 'nen anderen Server spielen und schauen, was da so passiert. Ich melde mich, sobald ich ein Ergebnis habe.

                      Kommentar


                      • #12
                        *Asche über mein Haupt streu*

                        Ich habs gefunden... Das Formular, mit dem die hochzuladende Datei ausgewählt wird, war in einem anderen Formular verschachtelt. Und daß das für irritierende Ergebnisse sorgt, weiß ich zwar, hab das zweite Formular jedoch trotzdem übersehen.

                        Rausgefunden habe ich es erst, als ich festgestellt habe, daß der Dateiname der hochgeladenen Datei im $_POST-Array nicht angezeigt wird, wenn alles korrekt funktioniert. Ab da war es mir zumindest klar, daß es sich um ein Problem beim Formularversand handeln muß, und nicht um eines des Transports.

                        Ich danke Euch jedenfalls für Eure Hilfe, bei der Eingrenzung der potentiellen Fehlerquellen hat mir das schon sehr geholfen.

                        Kommentar


                        • #13
                          Die Zeile davor und danach könnten auch interessant sein. Die Notice meldet nämlich einen undefinierten Array-Index "file", der in deinem Code-Ausschnitt nicht zu sehen ist.
                          Nieder mit der Camel Case-Konvention

                          Kommentar


                          • #14
                            ein html validator hätte dich auf den fehler aufmerksam gemacht (glaube ich).

                            Kommentar


                            • #15
                              Ich nutze den, der bei Homesite dabei ist, und der hat mich nur darauf hingewiesen, daß ich das </form>-Tag vor </TABLE> einbauen muß. Davon, daß ich ein verschachteltes Formular habe, hat er nichts gesagt.

                              Wie auch immer, nochmal passiert mir dieser Fehler nicht mehr - dazu hat er mich zuviel Zeit und Nerven gekostet

                              Gruß

                              Emil

                              Kommentar

                              Lädt...
                              X