konto usunięte

Temat: Pakowanie do ZIP w locie

Witam,

do pakowania plików w locie, tak aby potem je pobrać w postaci ZIP używam tej biblioteki CreateZipFile. Niestety przy dużej ilości plików (sumarycznie 150MB na przykład) serwer nie wyrabia. Spróbuje jeszcze tworzyć katalog na serwerze w TEMP, gdzie wrzucę wszystkie pliki, spakuje, a potem pobiorę. Jest to trochę metoda 'na około', ale może się sprawdzić. Macie może inny pomysł?
Adam W.

Adam W. senior php
developer, Symfony

Temat: Pakowanie do ZIP w locie

Tomasz Ignatiuk:
Witam,

do pakowania plików w locie, tak aby potem je pobrać w postaci ZIP używam tej biblioteki CreateZipFile. Niestety przy dużej ilości plików (sumarycznie 150MB na przykład) serwer nie wyrabia. Spróbuje jeszcze tworzyć katalog na serwerze w TEMP, gdzie wrzucę wszystkie pliki, spakuje, a potem pobiorę. Jest to trochę metoda 'na około', ale może się sprawdzić. Macie może inny pomysł?

wg mnie tak jak napisałeś - pakujesz pliki na serwerze i spakowany plik wysyłasz userowi.

konto usunięte

Temat: Pakowanie do ZIP w locie

Witaj Tomaszu,

wg mnie powinieneś w tym celu wykorzystać dobrodziejstwa skryptów CGI, a to co najmniej z dwóch powodów:

1) CGI ma dłuższy czas wykonania skryptu
2) Jako skrypt możesz wykorzystać język znacznie wydajniejszy niż php jak np. perl czy nawet skrypt w bashu

życzę powodzenia

konto usunięte

Temat: Pakowanie do ZIP w locie

Problem w tym, że nie mam bladego pojęcia o skryptach CGI, a czas nie pozwoli mi na to, żeby się go nauczyć.

konto usunięte

Temat: Pakowanie do ZIP w locie

Tak na szybko przychodzi mi do głowy jeszcze jeden pomysł, ponieważ domyślam się, że chodzi o to że blokuje Cię czas wykonania skryptu. Jeśli w jakiś sposób odpaliłbyś specjalnie przygotowanego taska w symfony to skypt wykonałby się z prawammi Twojego użytkownika oraz ze znacznie dłuższym (prawdopodobnie) czasem wykonania. Do tego mógłbyś np. wykorzystać zadanie crona i specjalnie przygotowaną tabelę z kolejką, która powiedziała by taskowi co ma pakować i gdzie, we frontendzie wyglądałoby to tak:

- user klika pobierz
- przy pomocy ajaxu zostaje zapisane zadanie do tabeli o ktorej wspomnialem wyzej
- cron, ktory uruchamia taska np. co 10 sekund napotyka na nowe zadanie i pakuje pliki
- w tym czasie uzytkownikowi caly czas wyswietla sie napis prosze czekac, a ajaxem asynchronicznie sprawdzane jest czy plik zostal juz spakowany np. co 3 sekundy
- jesli tak nastepuje redirect pod odpowiedni adres i download

troche to skomplikowane, ale powinno sie udac
Roman Piekarski

Roman Piekarski Programista do
wynajęcia

Temat: Pakowanie do ZIP w locie

Damian Kopiec:
Tak na szybko przychodzi mi do głowy jeszcze jeden pomysł, ponieważ domyślam się, że chodzi o to że blokuje Cię czas wykonania skryptu. Jeśli w jakiś sposób odpaliłbyś specjalnie przygotowanego taska w symfony to skypt wykonałby się z prawammi Twojego użytkownika oraz ze znacznie dłuższym (prawdopodobnie) czasem wykonania. Do tego mógłbyś np. wykorzystać zadanie crona i specjalnie przygotowaną tabelę z kolejką, która powiedziała by taskowi co ma pakować i gdzie, we frontendzie wyglądałoby to tak:

- user klika pobierz
- przy pomocy ajaxu zostaje zapisane zadanie do tabeli o ktorej wspomnialem wyzej
- cron, ktory uruchamia taska np. co 10 sekund napotyka na nowe zadanie i pakuje pliki
- w tym czasie uzytkownikowi caly czas wyswietla sie napis prosze czekac, a ajaxem asynchronicznie sprawdzane jest czy plik zostal juz spakowany np. co 3 sekundy
- jesli tak nastepuje redirect pod odpowiedni adres i download

troche to skomplikowane, ale powinno sie udac

Nie jest to skomplikowane a sposob jest elegancki. Sam podszedlbym w ten sam sposob do tego problemu.
Adam W.

Adam W. senior php
developer, Symfony

Temat: Pakowanie do ZIP w locie

a może by wysyłać spakowany plik mailem?:)
oczywiście jeżeli nie jest on za duży.

konto usunięte

Temat: Pakowanie do ZIP w locie

Z tym pakowaniem faktycznie fajny sposób, to może być ciekawe. Co do wysyłania mailem to nie da rady, bo pliki zazwyczaj mają 150, 200MB.

Problem rozwiązałem tak, że wywaliłem tą bibliotekę, a skorzystałem ze zwykłego pakowania ZIP z biblioteki w PHP. Ona widocznie nie robi zamieszania w pamięci i serwer działa bez problemu.

Następna dyskusja:

pakowanie do zip bez kompresji




Wyślij zaproszenie do