Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu: Skills Rozpocznij
Sekcja
Administracja Linux

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_functions i open_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 --ini

Przykł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.php

Krok 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.php

Krok 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.php

Metoda 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 / KonfiguracjaTypowa ś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.bak

Pozwala 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.ini

Lub użyj vim do bardziej zaawansowanej edycji:

sudo vim /etc/php/8.2/apache2/php.ini

Krok 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śnij CTRL + 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ępnie Y, a następnie Enter
  • vim: Naciśnij ESC, wpisz :wq, a następnie naciśnij Enter

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 = 3000

Ustawienia 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.log

Zarzą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 = On

OPcache (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 = 1

5. 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 httpd

Nginx + PHP-FPM

# Restart PHP-FPM (replace 8.2 with your PHP version)
sudo systemctl restart php8.2-fpm

# Restart Nginx
sudo systemctl restart nginx

Bezpieczne 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-fpm

Sprawdzenie, czy usługi są uruchomione

sudo systemctl status apache2
sudo systemctl status php8.2-fpm

6. 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_source

Ogranicz dostęp do systemu plików

; Limit PHP file access to specific directories
open_basedir = /var/www/html:/tmp

Ukryj informacje o wersji PHP

; Don't expose PHP version in HTTP headers
expose_php = Off

Wyłącz zdalne dołączanie plików

; Prevent PHP from including remote URLs (common attack vector)
allow_url_fopen = Off
allow_url_include = Off

Wzmocnij 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łądDlaczego to problemRozwiązanie
Ustawienie memory_limit = -1 w produkcjiPozwala skryptom na zużycie nieograniczonej ilości RAM, powodując awarie serweraUstaw rozsądny limit, taki jak 256M lub 512M
display_errors = On w produkcjiUjawnia użytkownikom wrażliwe ścieżki plików i poświadczenia bazy danychUstaw na Off i zamiast tego użyj log_errors = On
post_max_size < upload_max_filesizePowoduje ciche niepowodzenia przesyłaniaZawsze ustaw post_max_sizeupload_max_filesize
Edytowanie niewłaściwego php.iniZmiany nie dotyczą żądań internetowychUżyj phpinfo(), aby potwierdzić, który plik jest ładowany przez serwer internetowy
Niezrestartowanie serwera po zmianachStare ustawienia pozostają aktywneZawsze zrestartuj Apache lub PHP-FPM po edycji
Pozostawienie info.php na serwerzeUjawnia pełną konfigurację serwera atakującymUsuń natychmiast po użyciu
Ustawienie allow_url_include = OnUmoż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.ini przed 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() lub php -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.