Generowanie pdf, przekroczenie limitu pamięci |
Generowanie pdf, przekroczenie limitu pamięci |
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?
-------------------- |
|
|
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
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). |
|
|
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ść. |
|
|
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%) |
To zwiększ ten limit w php.ini lub set_time_limit lub reguły .htaccess A jeśli serwer na top nie zezwala? -------------------- |
|
|
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). |
|
|
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%) |
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) -------------------- |
|
|
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). |
|
|
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%) |
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. -------------------- |
|
|
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). |
|
|
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%) |
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. -------------------- |
|
|
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/ ? -------------------- there is much to be learned
|
|
|
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 -------------------- http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
|
|
|
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%) |
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/ ? 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. -------------------- |
|
|
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). |
|
|
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/ |
|
|
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%) |
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ę :/ -------------------- |
|
|
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. |
|
|
29.07.2012, 13:47:05
Post
#18
|
|
Developer Grupa: Moderatorzy Postów: 3 045 Pomógł: 290 Dołączył: 20.01.2007 |
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? 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. 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. |
|
|
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). |
|
|
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?
-------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 22.05.2024 - 07:19 |