![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
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/ |
|
|
![]()
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 02:08 |