Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Generowanie pdf, przekroczenie limitu pamięci
JoShiMa
post 28.07.2012, 15:22:11
Post #1





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Mam do wygenerowania dość duży dokument pdf. Sa to właściwie same tabelki a dokument składa się z kilkudziesięciu stron. Sprawdziłam FPDF i TCPDF i generowałam zawartość używając głównie metody Cell(), jednak obie klasy mają ten sam feler. Nie kończą roboty z powodu przekroczenia limitu pamięci. W przypadku TCPDF można użyć cache, ale tu dla odmiany mam przekroczenie czasu. Macie jakieś pomysły. Może jakaś inna klasa, albo jakiś trick?


--------------------
Go to the top of the page
+Quote Post
!*!
post 28.07.2012, 16:25:54
Post #2





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


To zwiększ ten limit w php.ini lub
  1. ini_set('memory_limit', 'wartosc');


lub reguły .htaccess


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
tehaha
post 28.07.2012, 16:33:03
Post #3





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


Ciężko poradzić coś skoro nie wiadomo ile to jest "dość duży dokument" oraz nie wiadomo na jakim serwerze to odpalasz. Na początek warto spróbować zwiększyć parametry "max_execution_time" oraz "memory_limit" w pliku ini (jeżeli masz dostęp) lub funkcją ini_set() (o ile nie jest zablokowana).

Ogólnie nie powinno być problemu z wygenerowaniem pliku PDF z setkami stron, więc być może problem leży w skrypcie, który generuje treść, może najpierw wygeneruj treść, a potem odzielnie wygeneruj plik pdf. Najlepiej zacznij też od czegoś prostego, żeby lepiej zdiagnozować gdzie leży problem. Np. spróbuj wygenerować tak samo duży plik pdf ale z prostą treścią lub nawet pusty, albo sprawdź ile stron możesz wygenerować skutecznie bez błędu. W każdym bądź razie problem leży raczej w spobie generowania treści, a nie w bibliotekach do generowania, zakładając oczywiście, że jest to przeprowadzane na sensownym hostingu.

W ostateczności próbowałbym wygenerować kilka plików pdf i potem je złączyć, ale to już jako absolutna ostateczność.
Go to the top of the page
+Quote Post
JoShiMa
post 28.07.2012, 16:38:11
Post #4





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(!*! @ 28.07.2012, 16:25:54 ) *
To zwiększ ten limit w php.ini lub set_time_limit

lub reguły .htaccess

A jeśli serwer na top nie zezwala?


--------------------
Go to the top of the page
+Quote Post
!*!
post 28.07.2012, 16:46:45
Post #5





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


To albo rybki, albo akwarium. Serwer zmienia/modernizuje się względem zapotrzebowania oprogramowania.

Ten post edytował !*! 28.07.2012, 16:47:42


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
JoShiMa
post 28.07.2012, 17:01:41
Post #6





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(tehaha @ 28.07.2012, 16:33:03 ) *
Ciężko poradzić coś skoro nie wiadomo ile to jest "dość duży dokument"


No na przykład taki:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2656 bytes)


--------------------
Go to the top of the page
+Quote Post
!*!
post 28.07.2012, 17:31:18
Post #7





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


A to w ogóle jest darmowy serwer? Jeśli nie, to podaj nazwę tego hostingu dla potomnych, aby omijać go szerokim łukiem. Takie zmiany powinny być możliwe, jeśli nie bezpośrednio ze skryptu/panelu to po kontakcie z administracją.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
JoShiMa
post 28.07.2012, 20:16:59
Post #8





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(!*! @ 28.07.2012, 17:31:18 ) *
A to w ogóle jest darmowy serwer? Jeśli nie, to podaj nazwę tego hostingu dla potomnych, aby omijać go szerokim łukiem. Takie zmiany powinny być możliwe, jeśli nie bezpośrednio ze skryptu/panelu to po kontakcie z administracją.

Jeśli nie potrafisz podpowiedzieć czegoś konstruktywnie to nie zaśmiecaj wątku. Ja tam nie lubię rozrzutności jeśli chodzi o zajętość pamięci i czas wykonywania skryptu i interesuje mnie jak odchudzić skrypt, jeśli to możliwe (wierzę, że tak) a nie jak mu przydzielić więcej pamięci.

Wiem, że są ludzie, którzy swoją karierę z kompem zaczynali w czasach, gdy wypasionych komputerów i wydaje im się, że to normalne, że programy są zasobożerne. Ja zaczynałam, gdy każdy bajt był na wagę złota (tylko w innym języku programowałam, bo o PHP to w PL jeszcze nikt nie słyszał, o internecie też) i każdy szanujący się programista umiał je oszczędzać. Teraz byle komórka ma lepszy procesor niż komputer na którym się uczyłam, ale to nie znaczy, że należy szastać zasobami bez wcześniejszego sprawdzenia czy nie da się czegoś jednak zoptymalizować.

Tak więc rozmawiajmy o możliwej optymalizacji takiego skryptu.


--------------------
Go to the top of the page
+Quote Post
!*!
post 28.07.2012, 20:26:05
Post #9





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Trudno rozmawiać o optymalizacji czegokolwiek, gdy nie zna się szczegółów. Niczego konkretnego nie podałeś, prócz informacji że nie możesz niczego zmienić na serwerze. Optymalizacja skryptu jest możliwa, ale skoro przekraczasz jakieś limity to oczywiste że nie zmienisz tego nie wiadomo jak, serwery i jego zasoby nie są z gumy.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
JoShiMa
post 28.07.2012, 20:50:57
Post #10





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(!*! @ 28.07.2012, 20:26:05 ) *
Trudno rozmawiać o optymalizacji czegokolwiek, gdy nie zna się szczegółów.

Dlatego podałam nazwy klas z których próbowałam korzystać i liczę na wypowiedzi osób, które z tymi klasami pracowały, albo znają inne, mniej zasobożerne klasy do generowania pdfów.


--------------------
Go to the top of the page
+Quote Post
irmidjusz
post 29.07.2012, 01:17:07
Post #11





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

Ostrzeżenie: (0%)
-----


Nie znam tych klas, które wymieniłaś, korzystałem jedynie z mPdf, ale nigdy nie generowałem nim tak dużych dokumentów.
A próbowałaś tego: http://www.phplivedocx.org/articles/pdf-ge...zend-framework/ ? smile.gif


--------------------
there is much to be learned
Go to the top of the page
+Quote Post
d3ut3r
post 29.07.2012, 05:04:00
Post #12





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

Ostrzeżenie: (0%)
-----


Jak już wspomniano ciężko coś napisać bez znajomości hostingu. Generalnie raczej nie liczyłbym na zoptymalizowanie klas. Można za to spróbować:

1. Generować po 1 stronie a później jeżeli jest możliwośc użycia np narzędzia gs połączyć je w 1 plik.
2. Skorzystać w ogóle tylko z narzędzia zewnętrznego a wywoływać je z PHP (htmldoc o ile mnie pamięć nie myli).
3. Dogadać się z adminem biggrin.gif


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
JoShiMa
post 29.07.2012, 07:43:55
Post #13





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(irmidjusz @ 29.07.2012, 01:17:07 ) *
Nie znam tych klas, które wymieniłaś, korzystałem jedynie z mPdf, ale nigdy nie generowałem nim tak dużych dokumentów.
A próbowałaś tego: http://www.phplivedocx.org/articles/pdf-ge...zend-framework/ ? smile.gif

A uruchamianie frameworka do wygenerowania jednego dokumentu będzie mniej pamięciożerne niż napisanie niewielkiego skryptu "z palca"? Wczoraj sprawdziłam, że nim zacznie się generować pierwsza strona już mam zajętość pamięci 12320768 wcześniej, samo dołączenie klasy tcpdf powoduje zajęcie na poziomie 8388608. W między czasie sa pobierane z pliku i przetwarzane dane na podstawie których generują się później te tabele w dokumencie. I to powoduje zajęcie około 4000000 a samo wygenerowanie dokumentu powoduje przekroczenie ilości jaką wcześniej podałam. Generowanie dokumentu pdh w tcpdf odbywa się poprzez wygenerowanie jego treści w postaci stringa. W tym wypadku jest on bardzo długi.


--------------------
Go to the top of the page
+Quote Post
!*!
post 29.07.2012, 10:24:16
Post #14





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Nadal się upierasz przy swoim.
Nie chodziło mi o nazwy klasy, bo te same w sobie już są zoptymalizowane, może je źle wykorzystujesz? Pokaż kod.

Jeśli nie możesz zmienić czy umieścić w skryptach tak prostych rzeczy do zmiany czasu i pamięci, to nie licz że w ogóle da się coś zrobić, bo zakładam że nawet poleceń cmd nie możesz odpalić.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
skowron-line
post 29.07.2012, 11:06:42
Post #15





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Tak jak @d3ut3r napisał jeżeli dane sie nie zmieniajaa zbyt często to dlaczego nie generować 5 tabelek osobno a jak ktoś będzie chciał całość to połączysz pliki, mpdf ma taką możliwość.

Możesz zrobić tak
- trzymasz 5 plików z tabelkami
- ktoś zmienai dane z 1 tabeliki po updacie / insercie kasujesz plik
- ktoś chce wygenerować cały raport (5 tabelek)
- sprawdzasz czy dana tabelka ma swój plik raportu jak ma to łaczysz jak nie to generujesz

i takim sposobem nie utkniesz na generowaniu wielu stron.



--------------------
I'm so fast that last night I turned off the light switch in my hotel room and was in bed before the room was dark - Muhammad Ali.
Peg jeżeli chcesz uprawiać sex to dzieci muszą wyjść, a jeżeli chcesz żeby był dobry ty też musisz wyjść - Al Bundy.

QueryBuilder, Mootools.net, bbcradio1::MistaJam
http://www.phpbench.com/
Go to the top of the page
+Quote Post
JoShiMa
post 29.07.2012, 13:13:46
Post #16





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Cytat(skowron-line @ 29.07.2012, 11:06:42 ) *
Tak jak @d3ut3r napisał jeżeli dane sie nie zmieniajaa zbyt często to dlaczego nie generować 5 tabelek osobno a jak ktoś będzie chciał całość to połączysz pliki, mpdf ma taką możliwość.

Bo nie ja o tym decyduję :/


--------------------
Go to the top of the page
+Quote Post
tehaha
post 29.07.2012, 13:27:08
Post #17





Grupa: Zarejestrowani
Postów: 1 748
Pomógł: 388
Dołączył: 21.08.2009
Skąd: Gdynia

Ostrzeżenie: (0%)
-----


Jak mamy Ci pomóc skoro nie podajesz żadnych konkretnych informacji, najlepiej:

1. pokaż skrypt
2. napisz ile stron pliku pdf generujesz
3. powiedz jaki masz hosting do dyspozycji.

Z tego co mi się wydaje to nie biblioteki są tutaj problemem tylko proces generowania treści, którą chcesz umieścić w pdf'ie, bo te bibliotekai są z powodzeniem stosowane do generowanie plików z setkami stron i nie sprawia to problemów, sam też generowałem pilki pdf na kilkadzisiąt stron, nawet na tanich hostingach współdzielonych i problemu nie było. Więc wina leży raczej w skrypcie, no chyba, że postawiłaś to na jakimś darmowym lub bardzo kiepskim hostingu.
Go to the top of the page
+Quote Post
webdice
post 29.07.2012, 13:47:05
Post #18


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Cytat(!*! @ 28.07.2012, 21:26:05 ) *
Trudno rozmawiać o optymalizacji czegokolwiek, gdy nie zna się szczegółów. Niczego konkretnego nie podałeś, prócz informacji że nie możesz niczego zmienić na serwerze. (...)


Podała informacje o dostępnej ilości pamięci, o wykorzystywanej bibliotece i funkcji z jakiej korzysta. Co ma Ci jeszcze napisać? Że wykonuje X razy funkcje Cell i to stanowi problem?

Cytat(d3ut3r @ 29.07.2012, 06:04:00 ) *
Jak już wspomniano ciężko coś napisać bez znajomości hostingu. (...)


Jakie znaczenie ma hosting? Ma dostęp do określonej ilości pamięci (wcale nie małej), a jaki to jest serwer, nie ma kompletnie żadnego znaczenia.

Cytat(!*! @ 29.07.2012, 11:24:16 ) *
Jeśli nie możesz zmienić czy umieścić w skryptach tak prostych rzeczy do zmiany czasu i pamięci, to nie licz że w ogóle da się coś zrobić, bo zakładam że nawet poleceń cmd nie możesz odpalić.


Daruj sobie tego typu komentarze bo zrobię Ci miesięczną przerwę w pisaniu na forum.

Co do samego tematu, spróbuj może skorzystać z funkcji pdf_*. Jeśli dokument nie jest bardzo skomplikowany, nie powinnaś mieć problemu z jego wygenerowaniem.
Go to the top of the page
+Quote Post
!*!
post 29.07.2012, 13:51:38
Post #19





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Cytat
Podała informacje o dostępnej ilości pamięci, o wykorzystywanej bibliotece i funkcji z jakiej korzysta. Co ma Ci jeszcze napisać? Że wykonuje X razy funkcje Cell i to stanowi problem?

Cytat
Daruj sobie tego typu komentarze bo zrobię Ci miesięczną przerwę w pisaniu na forum.


Ochłoń. Jak niby chciałbyś to zoptymalizować? Jakoś nie widzę tu fragmentów kodów, co z tego że podała klasy, jak i wykorzystanie może być różne i nieprawidłowe. Najprostszy i najszybszy sposób to właśnie zmiana tych ustawień, ale skoro Jej hosting tego nie umożliwia, to trudno jest to zrobić chociażby z poziomu tych klas. Jak niby chciałbyś to przeskoczyć?
Hosting jest ważny, bo można sprawdzić jakie opcje posiada i według nich działać np. przenieść to poza PHP.

Ten post edytował !*! 29.07.2012, 14:00:22


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
JoShiMa
post 29.07.2012, 19:55:05
Post #20





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

Ostrzeżenie: (0%)
-----


Bardzo dużo pamięci (czego należało oczekiwać) zajmuje mi wielowymiarowa tablica z danymi pobranymi z pliku, które następnie muszą zostać zaprezentowane w tym pdfie. Niestety dane czyli około 2000 linii muszę najpierw wczytać z pliku CSV, następnie posortować i dopiero wtedy zaprezentować więc nie da się wczytywać po linii i od razy w locie wrzucać do pdfa. I takie pytanie mi się nasunęło. Jaski wpływ na zajętość pamięci mają klucze tablic. To znaczy czy użycie w charakterze kluczy dość długich stringów jest bardzo pamięciożerne?


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 22.05.2024 - 07:19