Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] i zip
Forum PHP.pl > Forum > Przedszkole
Lejto
Mam kod który tworzy archiwum zip
  1. <?php
  2. $zip = new ZipArchive();
  3. $plik_arch = "testowy.zip";
  4. if ($zip->open($plik_arch, ZIPARCHIVE::CREATE) !==TRUE) {
  5. exit ("nie mogę zrobić pliku archiwum <$plik_arch>");
  6. }
  7.  
  8. $zip->addFormString("info.txt","Archiwum o nazwie $plik_arch zostało utowrzone w dniu ".date("Y-m-d H:i:s"));
  9. $zip->addFile("plik_testowy.txt");
  10. $zip->addFile("plik_testowy2.txt");
  11. echo "Ilość plików spakowanych: ".(($zip->numFiles)-1) . "\n";
  12. $zip->close();
  13. ?>

Nie che wypisywać kolejno plików
  1. <?php
  2. $zip->addFile("plik_testowy.txt");
  3. ?>

tylko chce spakować cały katalog jak to zrobić?
Pobrać nazwy plików w danym katalogu wrzycić je do tablicy i potem w pętli wykonać
  1. <?php
  2. $zip->addFile("plik_testowy.txt");
  3. ?>

?
Czy jak?
erix
Klasa DirectoryIterator:
http://www.jellyandcustard.com/2006/05/18/...t-files-in-php/

i wpakuj w funkcję rekurencyjną.
Lejto
o to chodzi?
  1. <?php
  2. 1.
  3. $dir = new DirectoryIterator( '/www/test/' );
  4.  2.
  5. foreach($dir as $file )
  6.  3.
  7. {
  8.  4.
  9. if(!$file->isDot() && !$file->isDir()) {
  10.  5.
  11. echo "FileName: ".$file->getFilename();
  12.  6.
  13. echo "Size: ".number_format(($file->getSize()/1024),2)." Kb";
  14.  7.
  15. echo "Date Created: ".date("D d M Y H:i:sa",$file->getCTime());
  16.  8.
  17. }
  18.  9.
  19. }
  20. ?>
erix
W dobrym kierunku idziesz. ;]

Teraz ubierz to w funkcję i wykonuj ją rekurencyjnie.
Lejto
to wydłubałem:
  1. <?
  2.  
  3.  $dir = new DirectoryIterator( 'galeria/obrazy/' );
  4.  $zip = new ZipArchive();
  5.  $plik_arch = "testowy.zip";
  6.  
  7.  if ($zip->open($plik_arch, ZIPARCHIVE::CREATE) !==TRUE) {
  8. exit ("nie mogę zrobić pliku archiwum <$plik_arch>");
  9. }
  10.  
  11. foreach($dir as $file )
  12.  
  13. {
  14.  
  15. if(!$file->isDot() && !$file->isDir()) {
  16.  
  17.  echo "FileName: ".$file->getFilename();
  18.  echo '<br>';
  19.  
  20. $zip->addFile($file->getFilename());
  21.  
  22. }
  23.  
  24. }
  25. echo "Ilość plików spakowanych: ".(($zip->numFiles)-1) . "\n";
  26. $zip->close();
  27. ?>

pokazuje listę plików ale ich nie pakuje

muszę utworzyć na serwerze plik .zip czy kod to zrobi?
erix
  1. <?php
  2. $zip->addFile($file->getFilename());
  3. ?>

=>
  1. <?php
  2. $zip->addFile($file->getPathname().'/'.$file->getFilename());
  3. ?>

?
Lejto
  1. <?
  2.  $dir = new DirectoryIterator( 'galeria/obrazy/' );
  3.  $zip = new ZipArchive();
  4.  $plik_arch = "testowy.zip";
  5.  
  6.  if ($zip->open($plik_arch, ZIPARCHIVE::CREATE) !==TRUE) {
  7. exit ("nie mogę zrobić pliku archiwum <$plik_arch>");
  8. }
  9.  
  10. foreach($dir as $file )
  11.  
  12. {
  13.  
  14. if(!$file->isDot() && !$file->isDir()) {
  15.  
  16.  echo "FileName: ".$file->getFilename();
  17.  echo '<br>';
  18.  
  19. $zip->addFile($file->getPathname().'/'.$file->getFilename());
  20. }
  21.  
  22. }
  23. echo "Ilość plików spakowanych: ".(($zip->numFiles)-1) . "\n";
  24. $zip->close();
  25. ?>

nie pakuje
erix
Hmm, w sumie nie wiem, dlaczego tak się dzieje...
Żadnego błędu? W jakim formacie zwraca Ci ścieżki?

BTW: zobacz w komentarzach: http://pl.php.net/manual/pl/ref.zip.php
Lejto
format:
FileName: 135614dsc00515_filtered.jpg

sory że tak późno już ale nie mogę spakować nawet pojedynczego pliku
  1. <?
  2.  
  3. $zip = new ZipArchive();
  4. $plik_arch = "testowy.zip";
  5. if ($zip->open($plik_arch, ZIPARCHIVE::CREATE) !==TRUE) {
  6. exit ("nie mogę zrobić pliku archiwum <$plik_arch>");
  7. }
  8.  
  9.  $zip->addFile("inedx.php.txt");
  10. $zip->addFile("plik_testowy2.txt");
  11. echo "Ilość plików spakowanych: ".(($zip->numFiles)-1) . "\n";
  12. $zip->close();
  13. ?>

skrypt uruchamiam na serwerze nie na localu
Wynik:
Ilość plików spakowanych: -1


Nie pakuje w ogóle
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.