Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Pakowanie plików z wykorzystaniem paginacji?
Forum PHP.pl > Forum > Przedszkole
Portek
Witam, mam dość poważny problem, otóż potrzebuję funkcji która automatycznie wylistuje do tablicy pliki w folderze, a następnie zacznie je pakować pojedynczo do plików nazwa_pobrana_z_tablicy.bz2. Wszystko było by pięknie gdyby nie sam fakt że nie mogę tego razem połączyć. Funkcja która ma za zadanie wylistować pliki do tablicy robi to, ale działanie skryptu w tym momencie się kończy i nie są pakowane pliki:
  1. <?php
  2. $dir = ".";
  3.  
  4. function scanDirectories($dir, $allowext, $allData=array()) {
  5. $dirContent = scandir($dir);
  6. foreach($dirContent as $key => $content) {
  7. $path = $dir.'/'.$content;
  8. $ext = substr($content, strrpos($content, '.') + 1);
  9.  
  10. if(in_array($ext, $allowext)) {
  11. if(is_file($path) && is_readable($path)) {
  12. $allData[] = $path;
  13. }elseif(is_dir($path) && is_readable($path)) {
  14. $allData = scanDirectories($path, $allData);
  15. }
  16. }
  17. }
  18. return $allData;
  19. }
  20.  
  21. $allowext = array("dem");
  22. $files = scanDirectories($dir,$allowext);
  23. print_r($files);
  24.  
  25. function bzip2 ($p) {
  26. $t = file_get_contents($p);
  27. $sp = bzopen ($p.".bz2", "w");
  28. bzwrite($sp, $t);
  29. bzclose ($sp);
  30. echo 'Spakowano!';
  31. return true;
  32. }
  33.  
  34. $i=0;
  35. while(!isset($files[$i])) {
  36. bzip2($files[$i]);
  37. $i++;
  38. }
  39. ?>


Kolega podsunął mi pomysł aby skorzystać z systemu paginacji, ale to troszke mija się z celem, ponieważ wylistowane pliki musiał bym umieścić w bazie danych, potem pobrać z tamtąd nazwy i pakować pliki. No chyba że istnieje inny sposób, ja siedzę nad tym tydzień i do niczego nie doszedłem...
wookieb
  1. while(isset($files[$i])) {

Bez wykrzyknika... Nie łatwiej było użyc foreach?
Jesteś pewien że ta linijką będzie napewno ok?
  1. $allData = scanDirectories($path, $allData);
Portek
Cytat(wookieb @ 8.08.2009, 14:06:29 ) *
[PHP] pobierz, plaintext
  1. while(isset($files[$i])) {
[PHP] pobierz, plaintext
Bez wykrzyknika... Nie łatwiej było użyc foreach?

Hmm, może i łatwiej ale początkujący ze mnie skrypter. Po usunięciu "!" pojawił się komunikat:
Kod
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 48659959 bytes) in /home/bbvn45/public_html/dema/pakuj.php on line 26


Cytat(wookieb @ 8.08.2009, 14:06:29 ) *
Jesteś pewien że ta linijką będzie napewno ok?
[PHP] pobierz, plaintext
  1. $allData = scanDirectories($path, $allData);
[PHP] pobierz, plaintext

Myślę że tak choć mogę się mylić, noga jestem z PHP...
wookieb
A sprawdziłeś działąnie funkcjie scanDirectories z podkatalogami?
Portek
Cytat(wookieb @ 8.08.2009, 18:42:14 ) *
A sprawdziłeś działąnie funkcjie scanDirectories z podkatalogami?

Tyle że ja nie mam już podkatalogów, skrypt leży bezpośrednio w folderze z plikami które ma wylistować i spakować.
wookieb
I jaka jest liczba tych plików w katalogu? U mnie działa.
Portek
Jeden + przyznałem, w funkcji był o jeden znak za dużo ("!") dlatego nie działała sciana.gif
Cytat(wookieb @ 8.08.2009, 19:12:45 ) *
I jaka jest liczba tych plików w katalogu? U mnie działa.

Plików jest średnio 5-6 (aktualizowane co ~30min), problem występuje jednak przy pakowaniu tych większych, pliki nierzadko mają rozmiar 100mb+. Problem z pakowaniem występuje już przy tych powyżej 40mb, mimo że miejsca jest jeszcze grubo ponad 40gb...
wookieb
Musisz zwiększyć ilość pamięci przyznanej dla skryptu
Memory_limit w php.ini
Portek
Cytat(wookieb @ 8.08.2009, 19:49:35 ) *
Musisz zwiększyć ilość pamięci przyznanej dla skryptu
Memory_limit w php.ini

Czyli mój projekt odpadł w przedbiegach... A mogło być tak pięknie i różowo... W każdym bądź razie dziękuje za dotychczasową pomoc. Kolega otrzymuje 2 plusiki. Temat można zamknąć ;-)
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.