Meddelande

Minska
No announcement yet.

Snabbare sätt att skapa en zip av filer med PHP?

Minska
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • Snabbare sätt att skapa en zip av filer med PHP?

    När användaren trycker på en knapp anropar jag en funktion i PHP. Funkionen hämtar länkar till bilder, lägger dem i en ZIP-fil och forserar en nedladdning av zip-filen till användaren.

    Såhär ser min funktion ut idag.

    Kod:
            $zipName = 'name-'.date("Y-m-d").'.zip';
    
              # create new zip opbject
              $zip = new ZipArchive();
    
              # create a temp file & open it
              $tmp_file = tempnam('.','');
              $zip->open($tmp_file, ZipArchive::CREATE);
    
    
              # loop through each file
              foreach($this->imageUrl as $file){
                  # Get extension
                  $ext = pathinfo(parse_url($file->url, PHP_URL_PATH), PATHINFO_EXTENSION);
    
                  # download file
                  $download_file = file_get_contents($file->url);
        
                  # add it to the zip              $zip->addFromString(basename($imageNumber.'-name.'.$ext),$download_file);
              }
    
                # close zip
                $zip->close();
    
                # send the file to the browser as a download
                header('Content-type: application/zip');
                header('Content-disposition: attachment; filename='.$zipName);
                header('Content-Length: ' . filesize($tmp_file));
                readfile($tmp_file);
    Funktionen fungerar bra, dvs det sker en nedladdning med en zip-fil innehållande bilderna. Problemet är att det går väldigt långsamt att skapa zip-filen med bilderna (inte ladda ner). Har jag 10 bilder tar det runt 30 sekunder att generera zip-filen för nedladdning. Hämta bilderna går snabbt så det är själva skapandet av zip-filen som går långsamt.

    Vad finns det för alternativ? Har sökt runt lite och verkar finnas några bibliotek som är rätt gamla och frågan är om de ger bättre resultat. Vissa hävdar även att det deras variant inte skriver en temporär fil på servern när zip-filen skapas vilket borde snabba upp processen.

    Som sagt. Vad har ni för tips? Utöka hårdvaran är inget alternativ.
    http://www.galnanyheter.com/ - Galna nyheter utöver det vanliga

    Skaffa Dropbox - Ett självklart val för att synkronisera filer mellan datorerna samt telefonen.

  • #2
    Laddar du ner filerna någonstans ifrån, eller är det lokala filer? Om det är nerladdningar så kan det nog ha lite att göra med varför det går långsamt. Prova att testköra samma filer som nerladdning samt lokalt från disk och mät skillnaden. Fundera på om du vet på förhand vilka filer som ska laddas ner och kör ett cron-jobb så att allt som är kvar att göra är att zippa de valda filerna på användarens begäran.
    Om det är lokala filer, kör addFile istället för file_get_contents+addFromString. Det kanske t.o.m. går att ge addFile en http(s)-url direkt...
    Gameboy Genius - Foto: Gatukonst och elektronikporr
    Internklippning:
    1) Snaggning av fångar.
    2) Klippning frisörer emellan.

    Kommentera

    Working...
    X