memory_limit
memory_limit to dyrektywa konfiguracyjna języka PHP, która określa maksymalną ilość pamięci operacyjnej (RAM), jaką może zużyć pojedynczy skrypt podczas jednego żądania. Gdy skrypt przekroczy ten próg, PHP przerywa jego wykonanie i zgłasza błąd krytyczny „Allowed memory size exhausted”. Mechanizm ten chroni serwer przed sytuacją, w której jeden nieoptymalny lub złośliwy skrypt wyczerpałby całą pamięć maszyny.
Jak działa memory_limit?
Wartość memory_limit podaje się w bajtach lub z sufiksem jednostki, na przykład 128M czy 256M. Limit obowiązuje osobno dla każdego procesu obsługującego żądanie — jeśli serwer przetwarza kilkadziesiąt żądań równolegle, każde ma własny przydział, dlatego wartość trzeba dobierać z uwzględnieniem dostępnego RAM i liczby procesów PHP-FPM. Aktualnie obowiązującą wartość można sprawdzić w wyniku funkcji phpinfo(). Ustawienie -1 oznacza brak limitu, co jest odradzane na serwerach produkcyjnych.
Zastosowanie w praktyce
Domyślne 128 MB wystarcza prostym stronom, ale rozbudowane aplikacje — Magento, sklepy z wieloma wtyczkami, import dużych plików czy generowanie PDF — mogą wymagać 256 MB lub więcej. Limit zmienia się w pliku php.ini, w konfiguracji puli PHP-FPM, przez dyrektywę php_value w pliku .htaccess (na serwerach z mod_php) albo funkcją ini_set() w kodzie.
Na hostingu współdzielonym górną granicę memory_limit narzuca dostawca, aby jeden klient nie zdominował zasobów współdzielonej maszyny. Na serwerze VPS lub dedykowanym administrator ma pełną kontrolę nad tą wartością. Warto pamiętać, że podnoszenie limitu leczy objawy, a nie przyczynę — jeśli skrypt zużywa nadmiernie dużo pamięci, lepszym rozwiązaniem jest jego optymalizacja, na przykład przetwarzanie danych mniejszymi porcjami.
Dyrektywę memory_limit warto rozpatrywać łącznie z pokrewnymi ustawieniami PHP, jak max_execution_time (maksymalny czas wykonania skryptu) czy upload_max_filesize i post_max_size (limity przesyłanych plików). Wszystkie one wspólnie decydują o tym, jak duże i jak złożone operacje serwer pozwoli wykonać w jednym żądaniu. Zbyt restrykcyjne wartości powodują błędy przy importach lub aktualizacjach, a zbyt liberalne narażają serwer na przeciążenie, dlatego dobór limitów zawsze jest kompromisem między funkcjonalnością a stabilnością środowiska.
Powiązane pojęcia
Najczęstsze pytania
Jak zwiększyć memory_limit w PHP?
Wartość można zmienić w pliku php.ini (np. memory_limit = 256M), w konfiguracji puli PHP-FPM, przez dyrektywę php_value w pliku .htaccess na serwerach z mod_php lub w kodzie funkcją ini_set(). Na hostingu współdzielonym limit często ustala się w panelu, a jego górna granica bywa narzucona przez dostawcę ze względów wydajnościowych.
Co oznacza błąd Allowed memory size exhausted?
To komunikat informujący, że skrypt PHP próbował zużyć więcej pamięci, niż pozwala memory_limit. Przyczyną bywa przetwarzanie zbyt dużych zbiorów danych, wyciek pamięci lub nieoptymalny kod. Rozwiązaniem jest optymalizacja skryptu (np. przetwarzanie danych porcjami) lub, jeśli to uzasadnione, zwiększenie limitu.
