ZARZąDZANIE HOSTINGIEM (DIRECTADMIN) • 6 MIN READ

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).

Zespół IQHost 29 wrz 2026 6m read
#DirectAdmin #IQHost #hosting

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_time jest 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_limit 1024M (1 GB) 1024M
upload_max_filesize 64M 1G
post_max_size 64M 1024M
max_execution_time 300 s 14400 s
max_input_time 60 s 14400 s
max_input_vars 1000 10000

upload_max_filesize, post_max_size i memory_limit mają te same maksima w Ustawieniach PHP i w Opcjach Select PHP version. Wysoki max_execution_time nie 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.

PHP Selector — zakładka Opcje w Globalnych ustawieniach konta z wartościami memory_limit, post_max_size i upload_max_filesize

Kliknij wartość obok dyrektywy (np. 64M przy upload_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.

Strona Ustawienia PHP — sekcja Dodaj nowe nadpisanie z polami Parametr i Wartość

W sekcji Dodaj nowe nadpisanie wybierz Parametr (np. upload_max_filesize), ustaw Wartość i kliknij Dodaj.

Krok 3: Jeden katalog albo sama subdomena — .htaccess

Gdy subdomena ma dostać inną wartość niż jej domena, dopisz dyrektywy do pliku .htaccess w katalogu subdomeny. Katalog widzisz w Zarządzaniu subdomenami, w kolumnie Katalog główny.

php_value upload_max_filesize 100M
php_value post_max_size 128M

Zapis wartości: liczba + jednostka — M (megabajty) albo G (gigabajty), np. 128M. Nie MB. Plik .user.ini na 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:

  1. 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";
    }
    
  2. Otwórz go w przeglądarce, np. sklep.twojadomena.pl/limity.php.

  3. 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_LIMIT w wp-config.php,
  • ini_set('memory_limit', ...) w kodzie wtyczki lub motywu,
  • wpis w Ustawieniach PHP, w Opcjach Select PHP version albo php_value w .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 poleceniem php — 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_filesize i post_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: .htaccess przykrywa 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 .htaccess w jej katalogu.
  • Zmiana działa po kilku, najwyżej kilkudziesięciu sekundach — odczekaj minutę.
  • Plik .user.ini nie 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 maxbytes w 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ł?

Potwierdź