php stream .zip komnpletten Ordner (große Dateien)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • php stream .zip komnpletten Ordner (große Dateien)

    Guten Tag,

    ich suche bereits seit langer zeit eine Möglichkeit via PHP einen kompletten Ordner als .zip herunterzuladen, ohne ihn erst erstellen und dann herunterladen zu müssen.

    Habe hier (link) eine Möglichkeit gefunden welche problemlos klappt, jedoch max. 767MB.

    Komme hier leider nicht weiter.

    memory_limit in php.ini hab ich bereits auf 128G gestellt, daran kann es nicht liegen.

    Villeicht hatte jemand schon dieses problem und konnte es lösen.

    hier mal mein aktueller Code:
    PHP Code:
    require_once ('archive.php');

    // Objekt erzeugen. Das Argument bezeichnet den Dateinamen
    $zipfile= new zip_file('Zipdatei.zip');

    // Die Optionen
    $zipfile->set_options(array (
            
    'basedir' => "/var/www/144.76.16.19/dl/"// Das Basisverzeichnis. Sonst wird der ganze Pfad von / an im Zip gespeichert.
            
    'followlinks' => 1// Symlinks sollen berücksichtigt werden
            
    'inmemory' => 1// Die Datei nur im Speicher erstellen
            
    'level' => 1// Level 1 = schnell, Level 9 = gut
            
    'recurse' => 1// In Unterverzeichnisse wechseln
            // Wenn zu grosse dateien verarbeitet werden, kannes zu einem php memory error kommen
            // Man sollte nicht über das halbe memory_limit (php.ini) hinausgehen
            
    'maxsize' => 20000000000*1024*1024
    ));

    $zipfile->add_files(array("""dl/test/*.*"));

    // Archiv erstellen
    $zipfile->create_archive();

    // Archiv zum Download anbieten
    $zipfile->download_file();

    // Oder speichern (vielen Dank an PHPler!!!)
    $zipfile->save_file('myzip.zip'$path '/tmp/'); 

  • #2
    Und „nicht klappen“ bei über X MB bedeutet was, konkret?

    Hast du analysiert, was für ein Fehler dabei auftritt, und wo?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Comment


    • #3
      Er lädt nur 767MB herunter.
      In der erstellten .zip sind alle Dateien vorhanden, die kleineren sind komplett und meine test .mkv (11GB) hat 0KB.

      Comment


      • #4
        push

        Comment


        • #5
          Schon analysiert, was am Server überhaupt passiert? Welche HTTP-Header werden gesendet? Gibt es Fehlermeldungen in den Error-Logs?

          Comment


          • #6
            ja, gibt keine.
            Wie geschrieben werden die Dateien nicht gepackt, tauchen aber in der .zip als NAme und 0KB auf.

            Comment


            • #7
              Und wie sieht der HTTP-Header aus?

              Comment


              • #8
                Und wie sieht es mit dem Naheliegenden aus, dem Speicher.

                Die Zip-Datei wird ja nur im Speicher erstellt, ist denn genug Speicher vorhanden. Eine Einstellung des Memory-Limits auf 128GB (was mir übrigens sehr übertrieben vorkommt) nutzt nix, wenn nur 16GB Speicher verbaut sind. 11GB können da durchaus schon zu gross sein.

                Comment


                • #9
                  ich kann keinen Fehler finden.
                  Die Dateien welche ich laden will sind alle zusammen etwas über 12G.
                  Im Server stecken 16G und belegt sind um die 600MB.

                  wie oben geschrieben lädt er noch nicht mal 800MB runter.

                  Comment


                  • #10
                    Und wie sieht jetzt der HTTP-Header aus?

                    Muss ich das noch 10mal fragen? Eigentlich sollte es in deinem Interesse sein brauchbare Antworten zu liefern und sich nicht alles aus der Nase ziehen zu lassen.

                    Comment


                    • #11
                      Problem konnte ich im übrigen lösen, danke für eure hilfreichen Tipps.

                      in der php.ini
                      "output_buffering = 128000" gesetzt, sind 128GB

                      Comment


                      • #12
                        PHP Code:
                                // Wenn zu grosse dateien verarbeitet werden, kannes zu einem php memory error kommen
                                // Man sollte nicht über das halbe memory_limit (php.ini) hinausgehen
                                
                        'maxsize' => 20000000000*1024*1024 
                        21 Petabytes. Da wird nicht geknausert.

                        Versuch lieber mal so was, bevor du endlos Daten in den Speicher ballerst:

                        - Zip Stream in PHP - Stack Overflow

                        Originally posted by Death-Dinner
                        in der php.ini
                        "output_buffering = 128000" gesetzt, sind 128GB
                        Da dürftest du um die Kleinigkeit eines Faktors von 1 Million falschliegen. Das sind 128 kB.

                        - PHP: Runtime Configuration - Manual

                        Kann mir nicht wirklich vorstellen, dass diese Einstellung was mit der Sache zu tun hat. Höchstens in Form eines eher bizarren Seiteneffekts. (Vielleicht generiert der eigentliche Code PHP-Notices/-Fehlermeldungen, die wegen „Headers already sent“ zu einem Abbruch führen, sobald sie es in die Ausgabe schaffen. Vielleicht wurden mit der vorherigen output_buffering-Einstellung nicht alle davon geschluckt, aber mit der neuen schon. Wilde These. )
                        Last edited by mermshaus; 12-09-2016, 16:57.

                        Comment

                        Working...
                        X