Witam, napisałem skrypt, który rozpakowuje archiwum zip. Niestety pliki większe niż 1KB obcina i zapisuje tylko 1KB danych, resztę pomija i przechodzi do następnego pliku. Nie wiem co może być przyczyną
  1. function bettermkdir($link)
  2. {
  3. $link2 = $link;
  4. while (!is_dir($link))
  5. {
  6. if (!@mkdir($link2)) $link2 = substr($link2,0,strrpos($link2,'/'));
  7. else $link2 = $link;
  8. }
  9. }
  10.  
  11. function ezip($zip,$gdzie)
  12. {
  13. if (!is_dir($gdzie)) bettermkdir($gdzie);
  14. $zip = zip_open($zip);
  15. while($lista_zpiow = zip_read($zip))
  16. {
  17. $konkretny_zip = zip_entry_name($lista_zpiow);
  18.  
  19. $gdzie_zapisac = $gdzie.$konkretny_zip;
  20.  
  21. if (!is_dir(substr($gdzie_zapisac,0,strrpos($gdzie_zapisac,'/'))))
  22. bettermkdir(substr($gdzie_zapisac,0,strrpos($gdzie_zapisac,'/')));
  23.  
  24. file_put_contents($gdzie_zapisac,zip_entry_read($lista_zpiow));
  25. }
  26. }
  27.  
  28. ezip('solid.zip', 'rozpakowane/');


Znalazłem rozwiązanie i piszę jak by komuś było potrzebne w przyszłości. Funkcja zip_entry_read jako drugi parametr przyjmuje rozmiar pliku jaki ma pobrać, jeżeli nie zostanie wprowadzony bazowo jest 1024. Z pomocą przychodzi funkcja zip_entry_filesize, która zwraca rozmiar rozpakowanego ciągu znaków.

Wystarczy zmienić linię 24
  1. file_put_contents($gdzie_zapisac,zip_entry_read($lista_zpiow,zip_entry_filesize($lista_zpiow)));


Proszę o zamknięcie tematu.