Limity PHP — memory_limit, upload_max_filesize, max_execution_time
Domyślne limity PHP w IQHost (pamięć 1 GB, upload 64 MB, 300 s), gdzie je zmienić dla całego konta, domeny z subdomenami albo jednego katalogu i jakie limity ma serwer WWW (2000 MB, 120 s).
Limity PHP decydują, ile pamięci może zająć skrypt, jak duży plik przyjmie formularz i jak długo skrypt może liczyć. Domyślne wartości w IQHost wystarczają typowym stronom. Przy sklepach, importach i dużych plikach warto wiedzieć, gdzie kończy się PHP, a gdzie zaczyna limit samego serwera WWW.
Co zyskasz
- Poznasz domyślne limity i zakres, w jakim je zmienisz.
- Wybierzesz właściwe miejsce zmiany: całe konto, domena z subdomenami albo jeden katalog.
- Sprawdzisz, jaki limit naprawdę obowiązuje na stronie.
- Naprawisz „Allowed memory size of X bytes exhausted”.
- Zrozumiesz, dlaczego długi import kończy się błędem 502/500, choć
max_execution_timejest wysoki.
Wymagania wstępne
- Konto DirectAdmin z domeną.
Domyślne limity
Wskazówka
Wartości domyślne PHP (wszystkie wersje w IQHost):
Dyrektywa Domyślnie Najwyżej memory_limit1024M (1 GB) 1024M upload_max_filesize64M 1G post_max_size64M 1024M max_execution_time300 s 14400 s max_input_time60 s 14400 s max_input_vars1000 10000
upload_max_filesize,post_max_sizeimemory_limitmają te same maksima w Ustawieniach PHP i w Opcjach Select PHP version. Wysokimax_execution_timenie wydłuży żądania z przeglądarki — patrz limity serwera WWW niżej.
Limity serwera WWW
Obowiązują niezależnie od ustawień PHP i nie zmienisz ich w panelu. Są takie same na wszystkich naszych serwerach:
| Limit | Wartość |
|---|---|
| Jedno żądanie (formularz, upload z przeglądarki) | do 2000 MB — większe kończy się błędem 413 |
| Czekanie na odpowiedź PHP | 120 s bez odpowiedzi — potem błąd 502 albo 500 |
| Import w phpMyAdmin | do 512 MB (limit samego phpMyAdmina) |
Dlatego długie operacje (import bazy, generowanie tysięcy miniatur, migracje sklepu) uruchamiaj przez SSH albo cron — PHP uruchomione z wiersza poleceń nie ma limitu czasu. Duże pliki wysyłaj przez FTP/SFTP.
Gdzie zmienić limity
Ustawienia PHP zmienisz w trzech miejscach. Różnią się zasięgiem. Gdy tę samą dyrektywę ustawisz w kilku, wygrywa miejsce o węższym zasięgu:
| Miejsce | Obejmuje | Pierwszeństwo |
|---|---|---|
| Select PHP version → Opcje | całe konto — wszystkie domeny i subdomeny | najniższe |
| Ustawienia PHP | jedną domenę razem z jej subdomenami | przykrywa Opcje |
php_value w pliku .htaccess |
katalog z tym plikiem i jego podkatalogi | przykrywa oba powyższe |
Przykład: w Opcjach ustawiasz upload_max_filesize na 256M, a w Ustawieniach PHP domeny na 128M. Domena i jej subdomeny dostaną 128M.
Zmiana zaczyna działać po kilku, najwyżej kilkudziesięciu sekundach, bez restartu.
Krok 1: Całe konto — Select PHP version → Opcje
W DirectAdmin: Dodatkowe funkcje → Select PHP version. Zostań na zakładce Globalne ustawienia konta i kliknij Opcje.
Kliknij wartość obok dyrektywy (np.
64Mprzyupload_max_filesize) i wybierz nową z listy. Zmiana zapisuje się od razu — potwierdza to komunikat „Opcja … została pomyślnie zapisana”. Obok zmienionej opcji pojawia się Resetuj do domyślnych.Zakładki Ustawienia dla domen nie używaj — zapis w niej wymaga izolacji CloudLinux, której standardowo nie włączamy. Inne wartości dla jednej domeny ustawisz w kroku 2.
Krok 2: Jedna domena z subdomenami — Ustawienia PHP
W DirectAdmin: Zarządzanie kontami → Ustawienia PHP. Domenę wybierasz w pomarańczowym przycisku w prawym górnym rogu. Nadpisanie obejmuje tę domenę i wszystkie jej subdomeny, np.
sklep.twojadomena.pl.
W sekcji Dodaj nowe nadpisanie wybierz Parametr (np.
upload_max_filesize), ustaw Wartość i kliknij Dodaj.
Krok 3: Jeden katalog albo sama subdomena —
.htaccessGdy subdomena ma dostać inną wartość niż jej domena, dopisz dyrektywy do pliku
.htaccessw katalogu subdomeny. Katalog widzisz w Zarządzaniu subdomenami, w kolumnie Katalog główny.php_value upload_max_filesize 100M php_value post_max_size 128MZapis wartości: liczba + jednostka —
M(megabajty) alboG(gigabajty), np.128M. NieMB. Plik.user.inina naszych serwerach nie działa.
Sprawdź, jaki limit naprawdę obowiązuje
Panel pokazuje, co ustawiłeś. Strona może dostać co innego, jeśli ta sama dyrektywa jest ustawiona gdzie indziej. Sprawdzisz to plikiem testowym:
-
W katalogu strony (dla subdomeny — w jej katalogu) utwórz plik
limity.php:<?php foreach (['memory_limit', 'upload_max_filesize', 'post_max_size', 'max_input_vars', 'max_execution_time'] as $d) { echo $d, ' = ', ini_get($d), "<br>\n"; } -
Otwórz go w przeglądarce, np.
sklep.twojadomena.pl/limity.php. -
Usuń plik po sprawdzeniu.
Jeśli plik pokazuje właściwą wartość, a aplikacja nadal zgłasza mniejszą, limit ustawia sama aplikacja — patrz problem 4 niżej.
memory_limit
Co to: ile pamięci RAM może zająć jeden skrypt PHP.
Domyślnie masz maksimum — 1 GB, tyle, ile obiecuje oferta. Gdy widzisz błąd:
Fatal error: Allowed memory size of 268435456 bytes exhausted
liczba w komunikacie mówi, jaki limit naprawdę obowiązywał (268435456 bajtów = 256 MB). Jeśli jest niższa niż 1 GB, limit obniżyła aplikacja albo czyjeś nadpisanie:
- WordPress:
WP_MEMORY_LIMITwwp-config.php, ini_set('memory_limit', ...)w kodzie wtyczki lub motywu,- wpis w Ustawieniach PHP, w Opcjach Select PHP version albo
php_valuew.htaccess.
Wskazówka
Jeśli skrypt zużywa cały 1 GB, wyższy limit nie pomoże — to zwykle wyciek pamięci we wtyczce lub przetwarzanie wszystkiego naraz. Szukaj winowajcy w logu błędów albo dziel operację na partie.
upload_max_filesize + post_max_size
Co to: największy plik przyjęty przez formularz (upload_max_filesize) i największe całe żądanie POST (post_max_size).
Domyślnie oba mają 64 MB. Gdy plik jest większy, WordPress pokazuje „The uploaded file exceeds the upload_max_filesize directive”.
Reguła: post_max_size ustaw nie mniejsze niż upload_max_filesize — np. upload_max_filesize = 100M i post_max_size = 128M.
Ile ma sens: przez przeglądarkę wyślesz plik do 1 GB — tyle wynosi górna granica upload_max_filesize, a serwer WWW przyjmuje jedno żądanie do 2000 MB. Przy dużych plikach ustaw np. upload_max_filesize = 1G i post_max_size = 1024M. Większe pliki wysyłaj przez FTP/SFTP.
max_execution_time
Co to: ile sekund pracy procesora może zużyć skrypt. Domyślnie 300.
Czas czekania na bazę danych czy odpowiedź zewnętrznego API się do niego nie liczy — dlatego w praktyce szybciej zadziała limit serwera WWW: 120 s bez odpowiedzi. Podnoszenie max_execution_time nie wydłuży więc żądania wysłanego z przeglądarki.
Co robić z długimi operacjami:
- dziel je na partie — wiele wtyczek importu ma opcję przetwarzania „po kawałku”,
- uruchamiaj je przez SSH (
php skrypt.php, WP-CLI) albo z crona poleceniemphp— wtedy limitu czasu nie ma, patrz Zadania Cron.
max_input_vars
Co to: maksymalna liczba pól w jednym formularzu (POST/GET). Domyślnie 1000.
Kiedy problem: duże menu WordPressa (po zapisie znikają pozycje), rozbudowane ustawienia wtyczek, formularze produktów z wieloma wariantami. Podnieś do 5000 albo 10000.
Typowe ustawienia
Strona firmowa, blog WordPress
Nic nie zmieniaj — domyślne wartości wystarczą.
Sklep WooCommerce / PrestaShop
upload_max_filesize = 100M
post_max_size = 128M
max_input_vars = 10000
Pamięć zostaw domyślną (1 GB). Import dużych plików CSV uruchamiaj partiami albo przez WP-CLI.
Najczęstsze problemy
1. „Allowed memory size exhausted” — mam 1 GB, a błąd pokazuje mniej
Sprawdź liczbę w komunikacie i poszukaj, kto obniża limit: WP_MEMORY_LIMIT / WP_MAX_MEMORY_LIMIT w wp-config.php, ini_set() w kodzie, nadpisanie w Ustawieniach PHP, Opcje Select PHP version albo php_value memory_limit w .htaccess.
2. „Import/aktualizacja kończy się błędem 502 albo 500 po dwóch minutach”
To limit czasu odpowiedzi serwera WWW, nie PHP. Podniesienie max_execution_time nie pomoże. Podziel operację na partie albo uruchom ją przez SSH/cron (bez limitu czasu).
3. „Upload kończy się błędem 413 albo «file too large»”
- 413 — żądanie przekracza limit serwera WWW (2000 MB): wyślij plik przez FTP/SFTP.
- „exceeds upload_max_filesize” — podnieś
upload_max_filesizeipost_max_size.
4. „Zmieniłem wartość, a strona (albo subdomena) dalej pokazuje starą”
- Sprawdź plikiem testowym (sekcja Sprawdź, jaki limit naprawdę obowiązuje), co PHP naprawdę dostaje w katalogu tej strony.
- Ta sama dyrektywa ustawiona w kilku miejscach:
.htaccessprzykrywa Ustawienia PHP, a Ustawienia PHP przykrywają Opcje Select PHP version. Wartość z Opcji nie zadziała w domenie, która ma własne nadpisanie. - Subdomena dostaje wartości swojej domeny z Ustawień PHP i konta z Opcji. Inną wartość dla samej subdomeny ustawisz w
.htaccessw jej katalogu. - Zmiana działa po kilku, najwyżej kilkudziesięciu sekundach — odczekaj minutę.
- Plik
.user.ininie działa na naszych serwerach — używaj panelu albo.htaccess.
PHP pokazuje właściwą wartość, a aplikacja mniejszą. Wtedy limit ma sama aplikacja i trzeba go zmienić w jej ustawieniach:
- Moodle — limit dla całej platformy: wpisz
maxbytesw wyszukiwarce administracji witryny. Osobne limity mają kurs (ustawienia kursu) i aktywność (np. zadanie). - WordPress w sieci witryn (multisite) — maksymalny rozmiar przesyłanego pliku ustawiasz w ustawieniach sieci.
- Wtyczki formularzy i importu — często mają własne pole „maksymalny rozmiar pliku”.
5. „Cron przerywa skrypt”
Jeśli cron wywołuje adres strony (wget/curl https://...), obowiązują limity serwera WWW. Zmień polecenie na uruchomienie PHP bezpośrednio, np. php /home/LOGIN/domains/twoja-domena.pl/public_html/cron.php — bez limitu czasu.
6. „Wszystkie limity na maksimum, a strona nadal wolna”
Problem nie leży w limitach PHP. Sprawdź:
- bazę (wolne zapytania, brak indeksów),
- cache (LiteSpeed Cache, Redis),
- obrazki (WebP, lazy load).
Słowniczek
- memory_limit — max RAM dla skryptu PHP.
- upload_max_filesize — max plik przez upload.
- post_max_size — max wielkość całego POST.
- max_execution_time — max czas wykonania (s).
- max_input_vars — max liczba zmiennych w request.
- Nadpisanie — wartość dyrektywy ustawiona dla jednej domeny w Ustawieniach PHP; przykrywa wartość konta z Select PHP version.
Related
Feedback
Czy ten artykuł pomógł?

