Ankündigung

Einklappen
Keine Ankündigung bisher.

Große Dateien per PHP Uploaden

Einklappen

Neue Werbung 2019

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

  • Große Dateien per PHP Uploaden

    Hi,

    ich versuche gerade einen Upload hinzubekommen, mit dem es möglich sein soll große Dateien hochladen zu können. Mit "normalen" Dateien funktioniert das ganz gut. Er gibt mit am Ende das aus:

    PHP-Code:
    Datei erfolgreich hochgeladenAlte Datei überschriebenDebug-Infos:
    Array
    (
        [
    userfile] => Array
            (
                [
    name] => aktuelles.png
                
    [type] => image/png
                
    [tmp_name] => /tmp/php1Temvy
                
    [error] => 0
                
    [size] => 33052
            
    )


    Bei großen (~38MB) bricht er irgendwann anscheinend ab -> Das Ausgabe-Array bleibt leer.

    Was ich schon versucht habe:

    PHP-Code:
    set_time_limit(0); 
    ini_set('upload_max_filesize''512M');
    ini_set('memory_limit''512M');
    ini_set('max_execution_time'7200);
    ini_set('session.gc_maxlifetime',7200); 
    und die Werte dann auch immer mit ini_get gegengeprüft. An was kann es denn noch liegen?

    Grüße,
    Rainer

  • #2
    ini_set kann für uploads nicht funktionieren, weil der ablauf folgender ist:

    post-request an webserver mit großer datei
    -> daten werden übertragen
    -> php startet und hat einen wert für das upload-limit den es aus der ini oder anderer quelle hat
    -> es stellt fest die datei ist zu groß, (mit passendem MAX_FILE_SIZE feld sogar schon früher und daten werden nicht übertragen)
    -> JETZT nachdem der upload abgebrochen/nicht akzeptiert wurde startet erst dein php-script das versucht das upload-limit hochzusetzen -> viel zu spät

    kurz und knapp: ini_set macht nicht bei allen werten sinn, weil sie zu spät manipuliert werden würden.
    entweder zugang zur php.ini oder teilweise via .htaccess die werte setzen

    Kommentar


    • #3
      diese ini-Manipulationen finden bereits auf der Formularseite ("uplaod-start.php") statt. Zur "Sicherheit" nochmal vor dem "move_uploaded_file"-Befehl.

      Also heißt das, wenn die "upload-start.php"-Seite verlassen wird, die ini-Werte zurückgesetzt werden und in der "upload.php" zuerst mit der Übertragung begonnen wird, obwohl die Änderung Code-technisch DAVOR liegen?

      Kommentar


      • #4
        nicht direkt - aber gerade wenn deine Seite bei einem der bekannten Web / FreeHoster liegt, dann hat der vorgebaut, dass du eben gerade diese Ini-Werte NICHT überschreiben darfst ... (meist dient ja dort ein physischer Server als Host für dutzende Seiten - und es läuft gleichzeitig nur ein Datenbankserver, da müssen die Ressourcen schön brüderlich geteilt werden

        speziell bei den Speicher-Zahlen und der Ausführungszeit lassen dich die Hoster sehr ungern dran herumspielen - es sei denn du hast deinen eigenen Root-server - und selbst dann sind diese Ini-Werte manchmal nicht modifizierbar per php, sondern du musst die php.ini direkt editieren

        Kommentar


        • #5
          Naja - wir sind hier bei 1&1 (auch wenn ich den Chef schon von nem Rootserver überzeugt hab) und die geben explizit den Tipp mit ini_set oder ne eigene php.ini in die entsp. Verzeichnisse wo die php liegt. Das versuche ich grade. Privat habe ich auch n Rootserver, da ist des alles kein Problem... drecks Hoster

          Kommentar


          • #6
            Klappt auch so nicht ... jemand eine Idee? Gibt es denn noch eine Variable die zu dem Fehler führen kann?

            Kommentar


            • #7
              schau mal nach set_time_limit()
              ABER: funktionier tnur mit php_safe_mode = off. Also bestenfalls zum debuggen.

              Kommentar


              • #8
                Zitat von AlfredHitzkopf Beitrag anzeigen
                schau mal nach set_time_limit()
                ABER: funktionier tnur mit php_safe_mode = off. Also bestenfalls zum debuggen.
                das hör ich zum ersten mal ...

                ich benutz das mit dem set_time_limit bei der Aufbereitung großer CSV dateien und deren anschließendem Download zum Anwender und der SafeMode ist definitv AN

                Kommentar


                • #9
                  naja laut php.net:

                  Warnung

                  Diese Funktion hat keine Wirkung, wenn PHP im Safe Mode ausgeführt wird. Dies lässt sich nur umgehen, wenn man den Safe Mode deaktiviert oder das Zeitlimit bereits in der php.ini ändert.

                  EDIT:
                  Habs grade mal an meinem Server ausprobiert.
                  php_safe_mode = on
                  set_time_limit funktioniert.

                  ...aeh?

                  Kommentar


                  • #10
                    lol

                    Kommentar


                    • #11
                      Kann es sein das du vielleicht max_input_time suchst?

                      Kommentar


                      • #12
                        cycap hat mich erleuchtet:
                        Verwendete PHP-Version: 5.x
                        php_safe_mode ab PHP 5.x ist depraced, bzw. nicht mehr vorhanden.
                        Deshalb funktioniert das Ganze!

                        Kommentar

                        Lädt...
                        X