php.ini — konfiguracja PHP na hostingu i VPS
Opublikowano: 9 kwietnia 2026 · Kategoria: Hosting, PHP
Plik php.ini to główny plik konfiguracyjny PHP — kontroluje limity pamięci, czasy
wykonania, rozmiary uploadów, raportowanie błędów i cache kodu. Właściwa konfiguracja może kilkukrotnie
przyspieszyć aplikację i wyeliminować tajemnicze błędy 500. Oto najważniejsze dyrektywy i jak
je ustawiać na hostingu i VPS.
Gdzie znaleźć i edytować php.ini
Lokalizacja php.ini zależy od środowiska:
- VPS / serwer dedykowany: zazwyczaj
/etc/php/8.x/fpm/php.ini(PHP-FPM) lub/etc/php/8.x/cli/php.ini(CLI). Sprawdź przezphp --ini. - Hosting współdzielony (cPanel): MultiPHP INI Editor w panelu → wybierz domenę i edytuj dyrektywy.
- Hosting współdzielony (DirectAdmin): panel PHP Configuration lub plik
.user.iniw katalogu domeny. - Plik .user.ini: umieszczony w katalogu
public_html/, obsługiwany przez PHP-FPM. Zmiany działają po upływieuser_ini.cache_ttl(domyślnie 5 minut).
# VPS: znajdź aktywny plik php.ini php --ini | grep "Loaded Configuration" # Sprawdź wersję PHP-FPM php-fpm8.2 -i | grep "php.ini" # Edytuj i przeładuj sudo nano /etc/php/8.2/fpm/php.ini sudo systemctl reload php8.2-fpm
Kluczowe dyrektywy — limity zasobów
; === LIMITY PAMIĘCI I CZASU === ; Maksymalna pamięć na jedno żądanie PHP memory_limit = 256M ; WordPress basic: 128M, WooCommerce: 256-512M ; Maks. czas wykonania skryptu (sekundy) max_execution_time = 60 ; import CSV/XML: 300+, WP-Cron: 120 ; Maks. czas oczekiwania na dane wejściowe (upload) max_input_time = 60 ; Maks. liczba zmiennych POST/GET (np. duże formularze) max_input_vars = 3000 ; Domyślnie 1000 — za mało dla Elementora/ACF ; === UPLOAD PLIKÓW === ; Maks. rozmiar pojedynczego przesyłanego pliku upload_max_filesize = 64M ; WordPress media: 32-64M ; Maks. rozmiar całego żądania POST (musi być >= upload_max_filesize) post_max_size = 64M ; Ustaw identycznie lub wyżej ; Maks. liczba plików w jednym żądaniu max_file_uploads = 20
Konfiguracja OPcache — przyspieszenie PHP
OPcache kompiluje pliki PHP do kodu pośredniego i przechowuje w pamięci — eliminuje powtórną kompilację przy każdym żądaniu. To najważniejsza optymalizacja PHP, dająca 2–5× przyspieszenie bez żadnych zmian w kodzie aplikacji.
; === OPCACHE (php.ini lub /etc/php/8.x/fpm/conf.d/10-opcache.ini) === opcache.enable = 1 opcache.enable_cli = 0 ; Włącz na 1 tylko dla CLI scriptsów ; Pamięć na skompilowany kod (MB) opcache.memory_consumption = 128 ; Dla WordPress: 128MB, duże projekty: 256MB ; Pamięć na internowane stringi opcache.interned_strings_buffer = 16 ; Maks. liczba plików w cache opcache.max_accelerated_files = 10000 ; Liczba plików PHP w projekcie * 1.5 ; Jak często sprawdzać zmiany plików (sekundy), 0 = zawsze (dev) opcache.revalidate_freq = 60 ; Produkcja: 60-3600 ; Walidacja timestampów plików (wyłącz na prod dla max wydajności) opcache.validate_timestamps = 1 ; JIT (PHP 8.0+) — dodatkowe przyspieszenie dla CPU-intensive code opcache.jit_buffer_size = 64M opcache.jit = tracing
# Sprawdź status OPcache php -r "var_dump(opcache_get_status());" # Wyczyść cache (np. po deployu) php -r "opcache_reset();"
Error reporting — dev vs produkcja
Błędna konfiguracja error reportingu to jedno z najczęstszych zagrożeń bezpieczeństwa — wyświetlanie błędów PHP na produkcji ujawnia ścieżki plików, strukturę bazy danych i wersje bibliotek.
; === ŚRODOWISKO DEVELOPERSKIE === error_reporting = E_ALL display_errors = On display_startup_errors = On log_errors = On error_log = /var/log/php/php_errors.log ; === ŚRODOWISKO PRODUKCYJNE === error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors = Off ; NIGDY nie pokazuj błędów użytkownikowi display_startup_errors = Off log_errors = On ; Loguj błędy do pliku error_log = /var/log/php/php_errors.log
Sesje, timezone i inne ważne dyrektywy
; === STREFA CZASOWA === ; Bez tego daty PHP mogą być błędne (UTC vs Europa/Warszawa) date.timezone = "Europe/Warsaw" ; === SESJE === ; Jak długo (sekundy) nieaktywna sesja jest przechowywana (domyślnie 1440 = 24 min) session.gc_maxlifetime = 3600 ; 1 godzina — dla e-commerce/paneli admina ; Czas życia ciasteczka sesji (0 = do zamknięcia przeglądarki) session.cookie_lifetime = 0 ; Bezpieczeństwo sesji session.cookie_httponly = 1 ; Blokuje dostęp JS do ciasteczka sesji session.cookie_secure = 1 ; Tylko HTTPS (włącz gdy masz SSL) session.use_strict_mode = 1 ; Odrzuca niezainicjowane ID sesji ; === INNE === ; Wyłącz expose_php — nie ujawniaj wersji PHP w nagłówkach HTTP expose_php = Off ; Rozmiar realpath cache (przyspiesza operacje na plikach) realpath_cache_size = 4096k realpath_cache_ttl = 600
Konfiguracja pod WordPress i WooCommerce
| Dyrektywa | WordPress | WooCommerce | Laravel |
|---|---|---|---|
memory_limit | 128–256 MB | 256–512 MB | 128 MB |
max_execution_time | 60 s | 120–300 s | 30–60 s |
upload_max_filesize | 32–64 MB | 64 MB | 10–64 MB |
max_input_vars | 3000 | 5000 | 1000 |
opcache.memory_consumption | 128 MB | 256 MB | 128 MB |
Dla WordPressa możesz część limitów ustawić w wp-config.php bez dostępu do php.ini:
// wp-config.php define( 'WP_MEMORY_LIMIT', '256M' ); define( 'WP_MAX_MEMORY_LIMIT', '512M' ); // Dla obszaru admin // Alternatywnie przez ini_set() (działa tylko dla PHP_INI_ALL dyrektyw) @ini_set( 'upload_max_size', '64M' ); @ini_set( 'post_max_size', '64M' ); @ini_set( 'max_execution_time', '300' );
Sprawdzanie aktywnych ustawień — phpinfo()
Najszybszy sposób weryfikacji konfiguracji PHP to plik phpinfo.php:
<?php // Utwórz plik phpinfo.php tymczasowo w public_html/ // USUŃ po weryfikacji — wystawia konfigurację serwera! phpinfo(); ?>
Kluczowe sekcje phpinfo(): Loaded Configuration File (ścieżka do php.ini), Additional .ini files parsed (pliki .user.ini), kolumna Local Value vs Master Value (lokalne nadpisania vs wartości globalne).