Matthias Jütte: File-Upload will nicht - warum?

Hallo!

Heute bin ich in meinem kürzlich verfaßten Upload-Skript auf ein Problem gestoßen. Plötzlich meint der Server, die hochzuladenden Dateien seien zu groß. Zugegebenermaßen, bei anfänglich auf 5000 gesetztem MAX_FILE_SIZE und zufällig ausgewählten .sql und .txt Dateien konnte ich beim Testen auch nicht drauf kommen.

Problem also heute bei Dateien mit Größen von 737K und 616K. Ich habe dann erstmal MAX_FILE_SIZE auf 40960 hochgesetzt (sollte ja dann 5 MB entsprechen) und gerade nochmal auf 1000000. Nach wie vor ist $_FILES['userfile']['error'] aber 2, was mir laut Handbuch sagt, daß die Datei die im Formular definierte maximale Uploadgröße übersteigt.

Hier mein Formular:

<form enctype="multipart/form-data" name="new_item" action="?" method="post">
    <label for="item_name">Name des Eintrags</label>
    <input type="text" name="item_name" />

<input type="hidden" name="MAX_FILE_SIZE" value="40960" />

<label for="userfile">Datei</label>
    <input name="userfile" type="file" />

<input type="hidden" name="cat_id" value="6" />
    <input type="hidden" name="input_status" value="1" />
    <input type="hidden" name="action" value="itemNew" />
    <input type="hidden" name="sid" value="xxx" />

<button type="submit">Eintrag anlegen</button>
</form>

upload_max_filesize ist auf "2M" gesetzt, was ebenfalls reichen dürfte (ganz abgesehen davon, daß es einen anderen Fehlercode gäbe, wenn das das Problem wäre).

Was mache ich falsch?

Gruß

Matthias

--
ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
http://www.makaio.de/quotations
  1. Hallo,

    Du setzt den ini-Wert MAX_FILE_SIZE nicht, indem Du ihn als hidden Feld übergibst. Das funktioniert so nicht, da dadurch nicht die Config-Var MAX_FILE_SIZE geändert wird.

    Entweder Du editierst die php.ini und änderst den entsprechenden Wert, oder Du probierst es über ini_set(), wobei ich mit Letzterem wenig Erfahrungen habe... soll heißen, ich weiß nicht, ob Du via ini_set diesen Wert beeinflussen kannst.

    Gruß,
    Stefan

    1. Hallo!

      Du setzt den ini-Wert MAX_FILE_SIZE nicht, indem Du ihn als hidden Feld übergibst. Das funktioniert so nicht, da dadurch nicht die Config-Var MAX_FILE_SIZE geändert wird.

      Ist hier aber genau so beschrieben: http://de2.php.net/manual/de/features.file-upload.php#features.file-upload.post-method

      Verwechselst du vielleicht MAX_FILE_SIZE und upload_max_filesize?

      Gruß

      Matthias

      --
      ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
      http://www.makaio.de/quotations
      1. Verwechselst du vielleicht MAX_FILE_SIZE und upload_max_filesize?

        Wups... ich wußte nicht, daß man diesen Wert angeben kann. Aber: auf der von Dir verlinkten Seite steht in dem Kasten "Warnung":

        <zitier>
        Also verlassen Sie sich nicht darauf, dass der Browser Ihrem Wunsch auch nachkommt! Wie auch immer, die PHP-Einstellungen für die maximale Dateigröße können nicht getäuscht werden.
        </zitier>

        Das heißt, der php-ini-Wert wird hierdurch tatsächlich nicht beeinflußt...

        Schau mal: http://de2.php.net/manual/de/features.file-upload.common-pitfalls.php

        <weiterzitier>
        Der mit MAX_FILE_SIZE eingestellte Wert kann nicht größer sein als der des ini-Parameters upload_max_filesize. Der Standardwert ist 2 Megabyte.

        Ist memory limit aktiviert, könnte eine Erhöhung von memory_limit nötig sein. Stellen Sie sicher, dass der Wert von memory_limit groß genug ist.

        Ist post_max_size zu klein konfiguriert, können große Dateien nicht hochgeladen werden. Stellen Sie sicher, dass der Wert von post_max_size groß genug ist.
        </weiterzitier>

        Kann es sein, daß post_max_size zu klein gesetzt ist ?

        Gruß,
        Stefan

        1. Hallo!

          Gebe zu, ich hätte etwas aufmerksamer lesen können...Trotzdem:

          Ist memory limit aktiviert, könnte eine Erhöhung von memory_limit nötig sein. Stellen Sie sicher, dass der Wert von memory_limit groß genug ist.
          Kann es sein, daß post_max_size zu klein gesetzt ist ?

          Beide Werte sind auf 8 MB gesetzt und dürften somit keine Probleme machen.

          Gruß

          Matthias

          --
          ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
          http://www.makaio.de/quotations
          1. Beide Werte sind auf 8 MB gesetzt und dürften somit keine Probleme machen.

            Hm... passiert das auch mit kleinen Dateien (< 10kb) ? Was ist, wenn Du das hidden-Feld "MAX_FILE_SIZE" ganz entfernst (in meinem Upload-Script hab ich die Anweisung auch nicht drin, geht also ohne) ? Sonst fällt mir nicht mehr so viel ein, außer das Ganze mal mit einem anderen Script zu testen... www.hotscripts.com liefert Dir bestimmt eine große Auswahl.

            Gruß, Stefan

            1. Hallo!

              »»Was ist, wenn Du das hidden-Feld "MAX_FILE_SIZE" ganz entfernst (in meinem Upload-Script hab ich die Anweisung auch nicht drin, geht also ohne) ?

              Yep, so tut's! Besten Dank und

              Gruß

              Matthias

              --
              ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
              http://www.makaio.de/quotations
              1. Hello,

                »»Was ist, wenn Du das hidden-Feld "MAX_FILE_SIZE" ganz entfernst (in meinem Upload-Script hab ich die Anweisung auch nicht drin, geht also ohne) ?

                Yep, so tut's! Besten Dank und

                Dann liegt es also am Browser?

                Harzliche Grüße aus http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau
                1. Hallo!

                  Ich habe nicht versucht die Logik in dieser Lösung zu erkennen. Benutzt habe ich jedenfalls Firefox 0.91 auf Win2K Pro.

                  Wenn es dich brennend interessiert (oder ich aus freien Stücken noch die Lust darauf bekomme) kann ich ja mal im IE ausprobieren, ob bei erneut eingefügtem MAX_FILE_SIZE das Problem genauso besteht.

                  Gruß

                  Matthias

                  --
                  ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
                  http://www.makaio.de/quotations
                  1. Hello Matthias,

                    Ich habe nicht versucht die Logik in dieser Lösung zu erkennen. Benutzt habe ich jedenfalls Firefox 0.91 auf Win2K Pro.

                    Wenn es dich brennend interessiert (oder ich aus freien Stücken noch die Lust darauf bekomme) kann ich ja mal im IE ausprobieren, ob bei erneut eingefügtem MAX_FILE_SIZE das Problem genauso besteht.

                    Angesichts de schönen Wetters heute (zumindest hier) würde ich das von Dir niemals verlangen *g*
                    Aber die Lösung des Rätsels wird wohl außer mir noch eine Menge Mitleser interessieren, ggf. auch erst viel später, wenn sie den Thread aus dem Archiv rauspulen.

                    Harzliche Grüße aus http://www.annerschbarrich.de

                    Tom

                    --
                    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                    Nur selber lernen macht schlau
                    1. Hallo!

                      Also gut, im Sinne der Gemeinschaft habe ich mich (trotz des auch hier schönen Wetters) mal eben drangesetzt und den IE ebenfalls versuchen lassen.

                      Und siehe da: er will auch nicht. Firefox also aus'm Schneider, Problem (vorläufig) als allgemein enttarnt! Darf ich jetzt irgendeinem großen Projekt 'nen Bug auftischen?

                      Gruß

                      Matthias

                      --
                      ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
                      http://www.makaio.de/quotations
                      1. Hello,

                        Also gut, im Sinne der Gemeinschaft habe ich mich (trotz des auch hier schönen Wetters) mal eben drangesetzt und den IE ebenfalls versuchen lassen.

                        Und siehe da: er will auch nicht. Firefox also aus'm Schneider, Problem (vorläufig) als allgemein enttarnt! Darf ich jetzt irgendeinem großen Projekt 'nen Bug auftischen?

                        Es ist schon etwas merkwürdig, denn diese Sache wurde bisher x-mal dokumentiert und muss wohl auch in tausenden von Anwendungen problemlos funktionieren.

                        Harzliche Grüße aus http://www.annerschbarrich.de

                        Tom

                        --
                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                        Nur selber lernen macht schlau
      2. Hallo Matthias.

        Verwechselst du vielleicht MAX_FILE_SIZE und upload_max_filesize?

        Du hast hoffentlich auch die auf der von dir verlinkten Seite stehende Warnung gelesen. PHP als serverseitiger Mechanismus interessiert sich nur für upload_max_filesize, MAX_FILE_SIZE ist eine Empfehlung an den Browser. Siehe:

        http://de2.php.net/manual/de/ini.sect.file_uploads.php#ini.upload-max-filesize
        http://de2.php.net/manual/de/function.ini-set.php
        http://www.dclp-faq.de/q/q-formular-upload-php4.html

        Freundschaft!
        Siechfred

        --
        Punk's not dead: http://www.siechfreds-welt.de/badreligion.shtml
        Dankbarkeit, man spürt sie ja so selten bei den Menschen, und gerade die Dankbarsten finden nicht den Ausdruck dafür, sie schweigen verwirrt, sie schämen sich und tun manchmal stockig, um ihr Gefühl zu verbergen. (Stefan Zweig)
        ie:) fl:) br:? va:{ ls:? fo:§ rl:( n4:} ss:? de:µ js:{ ch:° sh:( mo:? zu:}
        1. Hello Matthias,

          Du kannst ja Deine action mal auf mein Testscript legen, ob das dann klappt

          http://selfhtml.bitworks.de/debug/kontrolle.php

          Dann weißt Du wenigstens, ob es an Deinem Server oder an etwas anderem liegt.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Hallo!

            Da wird mir was von einer "broken pipe" erzählt. Könnte das an dem Proxy liegen, hinter dem ich sitze? Da habe ich leider auch keinen Einfluß drauf.

            Gruß

            Matthias

            --
            ss:| zu:| ls:[ fo:| de:] va:) ch:? sh:) n4:( rl:( br:> js:| ie:% fl:) mo:}
            http://www.makaio.de/quotations
            1. Hello,

              Da wird mir was von einer "broken pipe" erzählt. Könnte das an dem Proxy liegen, hinter dem ich sitze? Da habe ich leider auch keinen Einfluß drauf.

              Das wird wohl so sein. Da hilft testhalber nur, das gute alte Modem zu verwenden oder die Fritzkarte und dann am Proxy vorbei den Server zu quälen.

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau