Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

dj.drezyna

[php] Tworzenie plików w locie i zapis do *.zip

Polecane posty

Witam!

 

Chciałbym, by pewien skrypt zczytywał z bazy pewne dane i stworzył wynik w postaci treści zwróconej do przeglądarki. Jednak te pobrane dane mają wyglądać w mniej więcej taki sposób, że jeden rekord daje w wyniku jeden plik, które to pliki po wypakowaniu tego ściągniętego wygenerowanego zip-a mają się w katalogu zwyczajnie znaleźć.

 

Czyli skrypt wygeneruje pliki powiedzmy o nazwach: kopia1.txt konf.txt zachowa je np. do pliku dane.zip (ale bez zapisywania nawet tego pliku zip na dysku serwera), który po rozpakowaniu da te dwa przykładowe pliki.

 

Na pewno takie coś jest do zrobienia ale ja niestety nie wiem od czego zacząć i bardzo byłbym wdzięczny o chociaż wskazówki jak się do tego zabrać. Dziękuję i jednocześnie Wszystkiego Najlepszego w Nowy Roku!

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Po pierwsze jak chcesz tworzyć plik *.txt albo *.zip bez zapisywania na dysku? :) jak chcesz żeby dane nie były zapisane na dysku to co najwyżej w jakimś buforze je trzeba trzymać na początek ale wtedy ani nie jest to plik zip ani txt ani nic tylko fragment pamięci.

 

Na szybko w dokumentacji php można znaleźć taką klase do archiwów zip: http://php.net/manual/pl/book.zip.php

 

A co konkretnie chcesz osiągnąć bo może coś na okrętke próbujesz zrobić?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Chodzi mi o to by utworzyć pliki, które będą plikami ale po rozpakowaniu zipa. Nie chcę tworzyć plików na serwerze i potem ich wpakowywać do zipa tylko je utworzyć jedynie w pamięci. No chodzi dokładnie o to by nie zapisywać plików na dysku serwera, które i tak serwerowi nie będą do niczego potrzebne. Chodzi o to by użytkownik dostał plik zip z plikami wygenerowanymi przez zapytanie, które Użytkownik zadał.

 

Przykład.

Jest sobie strona przechowująca przykłady skryptów. I chodzi o to by sobie ktoś wszedł na np. id 17, kliknął sobie na ikonkę zapisz i w tym momencie treść kodu wyświetlona sobie na tej stronie została z oryginalnej postaci (z bazy) przekształcona w plik i przesłana do zapisania przez przeglądarkę. Oczywiście do pliku skryptu dołączane są biblioteki inne pomocnicze niezbędne pliki, które też powinny być wygenerowane z odpowiednich tabel bazy danych.

 

Jejku jej! Ten temat jest z zeszłego roku ;)

Bardzo byłbym wdzięczny za pomoc.

 

Aaa poszukałem: ZipArchive::addFromString ( string $localname , string $contents ), bo to jest metoda która tworzy plik w zipie racja? No i oto mi chodziło. Tylko pytanko jak nie zapisywać tego zipa na dysku serwera tylko od razu wysłać do przeglądarki?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Tylko pytanko jak nie zapisywać tego zipa na dysku serwera tylko od razu wysłać do przeglądarki?

 

Nie jestem guru php ale nie da się tak przecież chyba. Php jest interpretowane przez serwer a wynik dostaje klient. Rozwiązaniem wydaje mi się zapisywanie takich zipów w jakimś folderze tymczasowo o jakiś losowych (zmiennych nazwach) nazwach. Potem klient dostaje link a np. w nocy cronem możesz kasować te pliki wszystkie jeśli ich data utworzenia - data_dzis > 24h.

 

Nie wiem jaki poziom zabezpieczeń potrzebujesz etc. ale może ew. takie coś spróbuj: http://viralpatel.ne...ile-javascript/ :D teraz znalazłem.

 

Nigdy w sumie też nie bawiłem się ajax-em (aż wstyd) ale skoro potrzebujesz pobrać ten kod(tekst) z bazy danych to może właśnie spróbować coś z ajaxem dynamicznie i taki kodzik w JS z góry jakoś połączyć.

 

Czyli:

0. Wsadzasz na stronkę ten kod z js

1. Pobranie danych z DB używając ajaxa (a jak ? to już musisz poszukać tutoriali bo sam też nie wiem :P acz nie wydaje się to trudne raczej)

2. Przesyłasz pobrane dane z db -> js i tworzysz zipa tak jak w tym przykładzie gdzie jest button "demo"

 

Tak bym spróbował to zrobić

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ajax czy nie ajax. Tutaj to raczej nie ma znaczenia. Mi raczej chodzi o to czy można niezapisany plik zip zakodować do base64 i zwyczajnie, przepraszam za określenie, ,,wypluć w echo''. Oczywiście w echo bez zapisywania wcześniej. Może to niemożliwe, wtedy będę robił raczej tak jak mówisz, czyli zapisać z czasem i kiedy ktoś inny będzie pobierał usunąć wszystkie np. starsze po godzinie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Chyba jednak jestem ...jowy z tego php bo znalazłem takie coś jeszcze: (powinno wymuszać ściągnięcie pliku zip bez zapisywania - zresztą tak tam to określili ludzie)

 

http://stackoverflow...-force-download

 

sprawdziłbym u siebie ale nie mam teraz gdzie :P ale z ciekawości muszę sprawdzić, któregoś dnia.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

A faktycznie sory nie ma takiej metody. To ciekawe jak oni to rozkminiali. Jak szukałem na necie to część osób proponowała to co już ci mówiłem. Czyli tymczasowe pliki a potem ich kasowanie.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Spoko! Nie ma co przepraszać. No, a w tym przykładzie rzeczywiście nie ma tej metody, bo inna byłaby bajka gdyby on sobie tą klasę rozszerzył a tak to szczerze nie mam pojęcia jak na tym stackoverflow dziękowali mu za taką fuszerę.

 

Ja, ponieważ zipa potrzebuję do 200kB prze konwersją, to zwyczajnie:

1. tworzę losową nazwę

2. tworzę plik zip o tej nazwie

3. zczytuję zawartość do zmiennej,

4. usuwam utworzony plik i wszystko.

 

A sposób wygląda dokładnie jak opisałeś z tą różnicą że plik jest w jednym wywołaniu skryptu usuwany, bo to góra dwa tysie bajtów tak więc na luziku.

 

Także dziękuję, a jak pamiętam właśnie o metodę prosiłem, a nie o konkretne rozwiązanie, więc uważam temat za rozwiązany, za co dziękuję Tobie jeszcze raz!

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

×