Konfiguracja pliku php.ini: Kompletny przewodnik optymalizacji PHP na Twoim serwerze
Plik php.ini to główny plik konfiguracyjny PHP — kręgosłup prawie każdej nowoczesnej aplikacji internetowej. Niezależnie od tego, czy uruchamiasz WordPress, Laravel, Magento czy aplikację niestandardową, zrozumienie, jak prawidłowo skonfigurować php.ini, może dramatycznie poprawić wydajność serwera, wzmocnić bezpieczeństwo i zapewnić bezproblemową kompatybilność ze stosem oprogramowania.
Ten kompleksowy przewodnik przeprowadzi Cię przez wszystko, co musisz wiedzieć: co robi php.ini, jak go znaleźć, jak bezpiecznie go edytować i jak sprawdzić, czy Twoje zmiany działają prawidłowo.
1. Co to jest php.ini i dlaczego to ważne?
Plik php.ini to zwykły plik konfiguracyjny, który PHP czyta za każdym razem, gdy się inicjalizuje. Zawiera setki dyrektyw — par klucz-wartość, które kontrolują praktycznie każdy aspekt zachowania PHP w czasie wykonywania, w tym:
- Alokacja pamięci dla skryptów
- Limity przesyłania plików i rozmiary danych POST
- Poziomy raportowania błędów i rejestrowanie
- Ustawienia zarządzania sesją
- Ładowanie rozszerzeń (np. PDO, cURL, OPcache)
- Ograniczenia bezpieczeństwa takie jak
disable_functionsiopen_basedir - Limity czasu wykonywania aby zapobiec niekontrolowanym skryptom
Prawidłowe skonfigurowanie tych ustawień to nie tylko kwestia wygody — bezpośrednio wpływa na stabilność aplikacji, postawę bezpieczeństwa i doświadczenie użytkownika końcowego. Błędnie skonfigurowane ustawienia PHP są wiodącą przyczyną błędów aplikacji, nieudanych przesyłań plików, awarii wyczerpania pamięci i podatności na exploity bezpieczeństwa.
Jeśli hostujesz swoje aplikacje PHP na planie VPS Hosting, masz pełny dostęp root do modyfikacji php.ini — dając Ci pełną kontrolę nad środowiskiem PHP.
2. Lokalizowanie pliku php.ini
Lokalizacja php.ini zależy od Twojego systemu operacyjnego, wersji PHP i używanego Server API (SAPI) (Apache mod_php, PHP-FPM lub CLI). Oto trzy niezawodne metody, aby go znaleźć.
Metoda 1: Używanie wiersza poleceń (najszybsza metoda)
Otwórz terminal lub połącz się przez SSH i uruchom:
php --iniPrzykładowe wyjście:
Configuration File (php.ini) Path: /etc/php/8.2/cli
Loaded Configuration File: /etc/php/8.2/cli/php.ini
Scan for additional .ini files in: /etc/php/8.2/cli/conf.d
Additional .ini files parsed: /etc/php/8.2/cli/conf.d/10-opcache.ini, ...> Ważne: PHP często ma oddzielne pliki php.ini dla różnych SAPI. Wersja CLI (/etc/php/8.2/cli/php.ini) jest używana podczas uruchamiania PHP z wiersza poleceń, podczas gdy wersja Apache lub PHP-FPM (/etc/php/8.2/apache2/php.ini lub /etc/php/8.2/fpm/php.ini) jest używana dla żądań sieciowych. Zawsze edytuj prawidłowy plik dla Twojego przypadku użycia.
Metoda 2: Używanie phpinfo() w przeglądarce
Ta metoda pokazuje dokładnie, który plik php.ini ładuje Twój serwer sieciowy — co może różnić się od wersji CLI.
Krok 1: Utwórz nowy plik w katalogu głównym witryny:
sudo nano /var/www/html/info.phpKrok 2: Dodaj następującą zawartość:
<?php
phpinfo();
?>Krok 3: Zapisz plik, a następnie otwórz przeglądarkę i przejdź do:
http://yourdomain.com/info.phpKrok 4: Wyszukaj wiersz “Loaded Configuration File” w górnej części wyjścia. Wyświetli pełną ścieżkę do aktywnego pliku php.ini.
> ⚠️ Ostrzeżenie bezpieczeństwa: Usuń info.php natychmiast po użyciu. Ten plik ujawnia wrażliwe szczegóły konfiguracji serwera, które atakujący mogą wykorzystać.
sudo rm /var/www/html/info.phpMetoda 3: Używanie php -r (szybki jednolinijkowiec)
php -r "echo php_ini_loaded_file();"To wypisuje ścieżkę załadowanego pliku php.ini bezpośrednio do terminala — bez konieczności tworzenia pliku.
Typowe lokalizacje php.ini według platformy
| Platforma / Konfiguracja | Typowa ścieżka php.ini |
|---|---|
| Ubuntu/Debian + Apache (PHP 8.2) | /etc/php/8.2/apache2/php.ini |
| Ubuntu/Debian + PHP-FPM (PHP 8.2) | /etc/php/8.2/fpm/php.ini |
| Ubuntu/Debian + CLI (PHP 8.2) | /etc/php/8.2/cli/php.ini |
| CentOS/RHEL + Apache | /etc/php.ini |
| cPanel/WHM | /usr/local/lib/php.ini |
| Windows (XAMPP) | C:xamppphpphp.ini |
| macOS (Homebrew PHP 8.2) | /opt/homebrew/etc/php/8.2/php.ini |
3. Edycja pliku php.ini
Krok 1: Najpierw utwórz kopię zapasową
Przed wprowadzeniem jakichkolwiek zmian zawsze utwórz kopię zapasową:
sudo cp /etc/php/8.2/apache2/php.ini /etc/php/8.2/apache2/php.ini.bakPozwala to szybko przywrócić oryginalną konfigurację, jeśli coś pójdzie nie tak.
Krok 2: Otwórz plik w edytorze tekstu
Użyj nano dla przyjaznego dla początkujących doświadczenia:
sudo nano /etc/php/8.2/apache2/php.iniLub użyj vim do bardziej zaawansowanej edycji:
sudo vim /etc/php/8.2/apache2/php.iniKrok 3: Nawiguj i edytuj dyrektywy
Plik php.ini jest duży (często 1500+ linii). Użyj funkcji wyszukiwania edytora, aby przejść do określonych dyrektyw:
- W
nano: NaciśnijCTRL + W, a następnie wpisz nazwę dyrektywy (np.memory_limit) - W
vim: Naciśnij/, a następnie wpisz nazwę dyrektywy
Krok 4: Zapisz i wyjdź
- nano: Naciśnij
CTRL + X, a następnieY, a następnieEnter - vim: Naciśnij
ESC, wpisz:wq, a następnie naciśnijEnter
4. Kluczowe dyrektywy php.ini wyjaśnione
Oto szczegółowy przegląd najważniejszych dyrektywy php.ini, które powinieneś znać i skonfigurować:
Limity pamięci i zasobów
; Maximum memory a single PHP script can allocate
memory_limit = 256M
; Maximum time (in seconds) a script is allowed to run
max_execution_time = 60
; Maximum time PHP will spend parsing request data
max_input_time = 120
; Maximum number of input variables (important for complex forms)
max_input_vars = 3000Ustawienia przesyłania plików
; Whether file uploads are permitted
file_uploads = On
; Maximum size of an individual uploaded file
upload_max_filesize = 64M
; Maximum size of all POST data (must be >= upload_max_filesize)
post_max_size = 64M
; Maximum number of files that can be uploaded simultaneously
max_file_uploads = 20> Praktyczna zasada: post_max_size musi być zawsze równy lub większy niż upload_max_filesize. Jeśli post_max_size jest mniejszy, przesyłanie będzie dyskretnie nie powiedzie się.
Raportowanie błędów i rejestrowanie
; ---- DEVELOPMENT ENVIRONMENT ----
; Show all errors on screen (never use in production)
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
; ---- PRODUCTION ENVIRONMENT ----
; Log errors to a file, never display them to users
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/log/php/error.logZarządzanie sesjami
; Where session data is stored on the server
session.save_path = "/var/lib/php/sessions"
; Session cookie lifetime in seconds (0 = until browser closes)
session.cookie_lifetime = 0
; Prevent JavaScript from accessing session cookies (XSS protection)
session.cookie_httponly = On
; Only send session cookies over HTTPS
session.cookie_secure = On
; Strict session ID mode (prevents session fixation attacks)
session.use_strict_mode = OnOPcache (Wzmacniacz wydajności)
OPcache dramatycznie poprawia wydajność PHP poprzez przechowywanie prekompilowanego bytecode’u skryptu w pamięci współdzielonej:
opcache.enable = 1
opcache.memory_consumption = 128
opcache.interned_strings_buffer = 8
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 60
opcache.fast_shutdown = 15. Ponowne uruchomienie serwera WWW
Zmiany w php.ini nie wejdą w życie, dopóki nie uruchomisz ponownie odpowiedniej usługi. Użyj odpowiedniego polecenia dla swojej konfiguracji:
Apache (mod_php)
sudo systemctl restart apache2
# or on CentOS/RHEL:
sudo systemctl restart httpdNginx + PHP-FPM
# Restart PHP-FPM (replace 8.2 with your PHP version)
sudo systemctl restart php8.2-fpm
# Restart Nginx
sudo systemctl restart nginxBezpieczne przeładowanie (bez przestojów)
Na serwerach produkcyjnych użyj bezpiecznego przeładowania, aby uniknąć przerwania aktywnych połączeń:
# Apache graceful reload
sudo systemctl reload apache2
# PHP-FPM graceful reload
sudo systemctl reload php8.2-fpmSprawdzenie, czy usługi są uruchomione
sudo systemctl status apache2
sudo systemctl status php8.2-fpm6. Weryfikacja zmian
Po ponownym uruchomieniu serwera potwierdź, że nowe ustawienia są aktywne, używając jednej z tych metod:
Metoda 1: Grep w wierszu poleceń
# Check memory_limit
php -i | grep memory_limit
# Check upload_max_filesize
php -i | grep upload_max_filesize
# Check multiple values at once
php -i | grep -E 'memory_limit|upload_max_filesize|post_max_size|max_execution_time'Metoda 2: Strona phpinfo()
Tymczasowo utwórz plik info.php (pamiętaj, aby usunąć go później) i wyszukaj zmodyfikowane dyrektywy. Zmienione wartości pojawią się w kolumnach "Local Value" i "Master Value".
Metoda 3: Jednolinijkowy kod PHP
php -r "echo ini_get('memory_limit');"7. Zaawansowane wskazówki optymalizacji php.ini
Używanie .htaccess do zastępowania php.ini (tylko Apache)
Jeśli jesteś na hostingu współdzielonym lub nie masz dostępu root, możesz zastępować niektóre php.ini ustawienia za pośrednictwem .htaccess:
php_value memory_limit 256M
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 120> Uwaga: To działa tylko jeśli AllowOverride jest włączony i dostawca hostingu zezwala na zastępowanie dyrektyw PHP.
Używanie ini_set() w kodzie PHP
W przypadku ustawień specyficznych dla aplikacji możesz zastępować wartości php.ini w czasie wykonywania w ramach skryptów PHP:
<?php
ini_set('memory_limit', '512M');
ini_set('max_execution_time', '300');
?>Pliki php.ini dla każdego katalogu (PHP-FPM)
W PHP-FPM możesz zastosować różne ustawienia php.ini do różnych hostów wirtualnych lub katalogów, konfigurując pliki puli w /etc/php/8.2/fpm/pool.d/. Jest to szczególnie przydatne w przypadku hostowania wielu aplikacji o różnych wymaganiach.
Jeśli zarządzasz wieloma aplikacjami PHP, VPS z cPanel znacznie ułatwia zarządzanie ustawieniami PHP dla każdej domeny za pośrednictwem interfejsu graficznego bez ręcznego edytowania plików konfiguracyjnych.
8. Wzmacnianie bezpieczeństwa za pośrednictwem php.ini
Prawidłowa konfiguracja php.ini jest jednym z najskuteczniejszych sposobów na wzmocnienie środowiska PHP przed powszechnymi atakami.
Wyłącz niebezpieczne funkcje
; Prevent execution of system commands from PHP scripts
disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_sourceOgranicz dostęp do systemu plików
; Limit PHP file access to specific directories
open_basedir = /var/www/html:/tmpUkryj informacje o wersji PHP
; Don't expose PHP version in HTTP headers
expose_php = OffWyłącz zdalne dołączanie plików
; Prevent PHP from including remote URLs (common attack vector)
allow_url_fopen = Off
allow_url_include = OffWzmocnij bezpieczeństwo sesji
session.cookie_httponly = On
session.cookie_secure = On
session.use_strict_mode = On
session.cookie_samesite = "Strict"> Wskazówka Pro: Jeśli prowadzisz sklep e-commerce lub obsługujesz wrażliwe dane użytkowników, połącz wzmocniony php.ini z ważnym certyfikatem SSL, aby zaszyfrować wszystkie przesyłane dane. HTTPS jest obowiązkowy, aby session.cookie_secure = On działał prawidłowo.
9. Częste błędy php.ini do uniknięcia
| Błąd | Dlaczego to problem | Rozwiązanie |
|---|---|---|
Ustawienie memory_limit = -1 w produkcji | Pozwala skryptom na zużycie nieograniczonej ilości RAM, powodując awarie serwera | Ustaw rozsądny limit, taki jak 256M lub 512M |
display_errors = On w produkcji | Ujawnia użytkownikom wrażliwe ścieżki plików i poświadczenia bazy danych | Ustaw na Off i zamiast tego użyj log_errors = On |
post_max_size < upload_max_filesize | Powoduje ciche niepowodzenia przesyłania | Zawsze ustaw post_max_size ≥ upload_max_filesize |
Edytowanie niewłaściwego php.ini | Zmiany nie dotyczą żądań internetowych | Użyj phpinfo(), aby potwierdzić, który plik jest ładowany przez serwer internetowy |
| Niezrestartowanie serwera po zmianach | Stare ustawienia pozostają aktywne | Zawsze zrestartuj Apache lub PHP-FPM po edycji |
Pozostawienie info.php na serwerze | Ujawnia pełną konfigurację serwera atakującym | Usuń natychmiast po użyciu |
Ustawienie allow_url_include = On | Umożliwia ataki Remote File Inclusion (RFI) | Zawsze utrzymuj to Off |
10. Podsumowanie
Opanowanie konfiguracji php.ini jest fundamentalną umiejętnością dla każdego administratora systemu lub dewelopera web. Prawidłowe ustawienia mogą oznaczać różnicę między wolnym, podatnym na ataki serwerem a szybkim, bezpiecznym środowiskiem gotowym do produkcji.
Podsumowanie kluczowych wniosków:
- Zawsze wykonuj kopię zapasową
php.iniprzed wprowadzeniem zmian - Zidentyfikuj prawidłowy plik — CLI i web server SAPIs często używają różnych plików
php.ini - Dostosuj limity zasobów (
memory_limit,max_execution_time,upload_max_filesize) do potrzeb twojej aplikacji - Wzmocnij bezpieczeństwo poprzez wyłączenie niebezpiecznych funkcji, ukrycie informacji o wersji i ograniczenie dostępu do plików
- Włącz OPcache dla znacznych wzrostów wydajności
- Nigdy nie wyświetlaj błędów w produkcji — zamiast tego je loguj
- Uruchom ponownie web server po każdej zmianie i zweryfikuj za pomocą
phpinfo()lubphp -i
Środowisko hostingowe, które wybierzesz, również odgrywa ważną rolę w tym, jak wiele kontroli masz nad konfiguracją PHP. Dzięki Serwerom Dedykowanym od AlexHost uzyskujesz pełny, nieograniczony dostęp do konfiguracji PHP twojego serwera — idealny dla aplikacji o dużym ruchu z złożonymi wymaganiami. W przypadku mniejszych projektów lub zespołów dopiero zaczynających pracę, plany Hostingu Współdzielonego zapewniają zarządzane środowisko, w którym wiele ustawień PHP jest wstępnie zoptymalizowanych dla ciebie.
Regularnie przeglądaj konfigurację php.ini w miarę jak twoja aplikacja się rozwija, wersje PHP są aktualizowane i zmieniają się twoje wzorce ruchu. Dobrze dostrojone środowisko PHP to nie jednorazowa konfiguracja — to ciągła praktyka, która przynosi korzyści w wydajności, niezawodności i bezpieczeństwie.
na wszystkich usługach hostingowych