Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zip i problem z dostępną pamięcią
Forum PHP.pl > Forum > PHP
Master Miko
Witam,
próbuję stworzyć skrypt który umożliwiłby zapakowanie w zip około 850 zdjęć (~90MB) i umożliwił ich ściągnięcie. Używam zip.lib.php (Eric Mueller) - to co znajduje się w phpMyAdmin.


Tak pobieram dane co do ściężki i wyświetlam plik:
  1. <?php
  2. require_once("zip.lib.php");
  3.  
  4. echo zipdirr('./'.$path.'/');
  5.  
  6. header("Pragma: public");
  7. header("Expires: 0");
  8. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  9. header("Cache-Control: public"); 
  10. header("Content-Description: File Transfer");
  11.  
  12. //Use the switch-generated Content-Type
  13. header("Content-Type: application/zip");
  14.  
  15. //Force the download
  16. $header="Content-Disposition: attachment; filename=".$zip_filename.";";
  17. header($header);
  18. header("Content-Transfer-Encoding: binary");
  19. header("Content-Length: ".ob_get_length());
  20. ?>


A taką funkcją przeczesuje cały folder w poszukiwaniu zdjęć:
  1. <?php
  2. function zipdirr($dir) {
  3.  
  4. if (!is_dir($dir)) return false;
  5. if (($dh = opendir($dir)) !== false) {
  6. $zipfile = new zipfile();
  7.  while (($entry = readdir($dh)) !== false) {
  8.  if ($entry != "." && $entry != ".." && $entry != ".htaccess") {
  9.  if (is_file($dir . $entry) || is_link($dir . $entry)) {
  10.  
  11.  //substr($dir . $entry, 0, -4)
  12.  $zipfile -> addFile(file_get_contents($dir . $entry), $dir . $entry);
  13.  }
  14.  
  15.  }
  16.  }
  17.  closedir($dh);
  18.  
  19.  
  20.  return $zipfile -> file();
  21. }
  22. return false;
  23. }
  24. ?>



Proszę o pomoc
Jak poradzić sobie z porblemem pamięci? Mam dostępne 15mb
xian.pl
Miałem podobny problem trzeba przerobić plik zip.lib.php by po każdym dodanym do archiwum pliku zapisywać go odrazu na dysk, a nie przechowywać tego wszystkiego w pamięci.

Czyli w funkcji addFile zamiast wrzucać pliki skompresowane do datasec[] (linijka: $this -> datasec[] = $fr;)
należy $fr za każdym razem dopisać do pliku wyjściowego.
Master Miko
Aha... w ten sposób. Rozumiem, dzięki. Pewnie zajmie trochę czasu ale wiem jak to już zrobić.
xian.pl
a zapomniałem może być szybszy sposób używając .htaccess ale nie wiem czy działa

php_value memory_limit 250M
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.