Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Out of memory przy otwieraniu pliku xlsx
grzecho83
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 31.10.2011

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


Witam, używam biblioteki SimpleXLSX.php do odczytu plików *.xlsx, przy próbie otwarcia pliku pojawia się błąd:

Fatal error: Out of memory (allocated 83886080) (tried to allocate 29970075 bytes) in /***/SimpleXLSX.php on line 535

Na domowym serwerze XAMP działa ok, problem jest po wgraniu strony na serwer zewnętrzny. W pomocy technicznej dowiedziałem się że mają limit pamięci dla php 128MB i nie można go zwiększyć.
Plik *.xlsx ma rozmiar na dysku 6,2MB, więc dlaczego rozmiar jest przekroczony? Kod PHP otwierający plik też nie jest jakoś mocno rozbudowany.
Pytanie, czy można jakoś zoptymalizować tą bibliotekę?
LInk do strony z biblioteką simplexlsx
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kreatiff
post
Post #2





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


Wielkość pliku na dysku nie oznacza, że właśnie tyle RAMu zużyje aplikacja go otwierająca czy przetwarzająca. Jeśli go wczytuje całego do pamięci, to oznacza, że wielkość pliku w MB oznacza prędzej minimalne zużycie RAMu.
Albo gdzieś jest błąd w klasie powodujący wyciek pamięci dla tego pliku, albo to normalne, że działania na pliku pochłaniają właśnie takie ilości RAMu.

Możesz zmierzyć na localhost ile RAMu jest zaalokowane w szczytowym momencie. I jeśli >128 MB, to nic tutaj nie pomoże: https://www.php.net/manual/en/function.memo...-peak-usage.php

Masz możliwość przerobienia tego xlsx na csv? Jeśli tak, odejdzie masa problemów i to będzie najlepsze rozwiązanie.

A jeśli nie, to możesz też spróbować innej biblioteki, np.: https://github.com/PHPOffice/PhpSpreadsheet/
Go to the top of the page
+Quote Post
grzecho83
post
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 31.10.2011

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


Plik csv byłby dużo lepszy, od takiego zaczynałem budowę systemu i na tym działało super, ale dane mam w pliku xlsx.

Powiem w skrócie na czym polega ten system. Mamy wykupione oprogramowanie do zarządzania zamówieniami, ten system co godzinę eksportuje plik xlsx z wszystkimi zamówieniami na dysk google.
Ja buduje system który pobiera ten plik z dysku google na serwer, otwiera go i szuka w nim nowych zamówień. Nowe zamówienia wrzuca do mazy danych. Na podstawie tych zamówień zleca produkcję podzespołów i zarządza całym procesem produkcji.
W pliku jest już 8611 wierszy, i przybywa czasem po kilkanaście dziennie. Wiięc zwiększenie limitu nie pomoże bo problem kiedyś wróci, jeśli przybędzie odpowiednio dużo zamówień. Ręczny export do csv też odpada bo to jest kilka razy dziennie. Idealne było by gdybym znalazł sposób na automatyczny export do csv po pobraniu pliku.

Sprawdzę też PhpSpreadsheet, który polecacie. Ale podejrzewam że też będzie miał pewne ograniczenia, pliki CSV były otwierane linijka po linijce, i nie miało wielkiego znaczenia ile tych wierszy jest. Dowiem się też czy system do zamówień może exportowć dodatkowo dane w formie csv.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 14.10.2025 - 02:08