Заощадьте 15% на всіх хостингових послугах

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код: Skills Почати
Рубрики
Linux Адміністрація

Налаштування файлу php.ini: Повний посібник з оптимізації PHP на вашому сервері

Файл php.ini — це головний файл конфігурації для PHP — основа майже кожного сучасного веб-додатку. Незалежно від того, чи ви запускаєте WordPress, Laravel, Magento або користувацький додаток, розуміння того, як правильно налаштувати php.ini, може значно покращити продуктивність вашого сервера, посилити безпеку та забезпечити безперебійну сумісність з вашим стеком програмного забезпечення.

Цей комплексний посібник проведе вас через все, що вам потрібно знати: що робить php.ini, як його знайти, як безпечно його редагувати та як перевірити, що ваші зміни працюють правильно.

1. Що таке php.ini і чому це важливо?

Файл php.ini — це звичайний текстовий файл конфігурації, який PHP читає кожного разу при ініціалізації. Він містить сотні директив — пар ключ-значення, які контролюють практично кожен аспект поведінки PHP під час виконання, включаючи:

  • Розподіл пам’яті для скриптів
  • Обмеження завантаження файлів і розміри даних POST
  • Рівні звітування про помилки і логування
  • Параметри управління сеансами
  • Завантаження розширень (наприклад, PDO, cURL, OPcache)
  • Обмеження безпеки, такі як disable_functions і open_basedir
  • Обмеження часу виконання для запобігання неконтрольованим скриптам

Правильне налаштування цих параметрів — це не просто питання зручності — це безпосередньо впливає на стабільність вашої програми, стан безпеки та досвід користувача. Неправильно налаштовані параметри PHP є однією з основних причин помилок програми, невдалих завантажень файлів, збоїв через вичерпання пам’яті та вразливостей безпеки.

Якщо ви розміщуєте свої PHP-програми на плані VPS Hosting, у вас є повний доступ root для вільного змінення php.ini — що дає вам повний контроль над вашим PHP-середовищем.

2. Розташування файлу php.ini

Розташування php.ini залежить від вашої операційної системи, версії PHP та Server API (SAPI), що використовується (Apache mod_php, PHP-FPM або CLI). Ось три надійні методи для його пошуку.

Метод 1: Використання командного рядка (найшвидший метод)

Відкрийте термінал або підключіться через SSH та виконайте:

php --ini

Приклад виходу:

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

> Важливо: PHP часто має окремі файли php.ini для різних SAPI. Версія CLI (/etc/php/8.2/cli/php.ini) використовується при запуску PHP з командного рядка, тоді як версія Apache або PHP-FPM (/etc/php/8.2/apache2/php.ini або /etc/php/8.2/fpm/php.ini) використовується для веб-запитів. Завжди редагуйте правильний файл для вашого випадку.

Метод 2: Використання phpinfo() у браузері

Цей метод показує точно, який файл php.ini завантажує ваш веб-сервер — що може відрізнятися від версії CLI.

Крок 1: Створіть новий файл у кореневій папці вашого веб-сайту:

sudo nano /var/www/html/info.php

Крок 2: Додайте наступний вміст:

<?php
phpinfo();
?>

Крок 3: Збережіть файл, потім відкрийте браузер і перейдіть на:

http://yourdomain.com/info.php

Крок 4: Знайдіть рядок “Loaded Configuration File” біля верхньої частини виходу. Він відобразить повний шлях до активного файлу php.ini.

> ⚠️ Попередження про безпеку: Видаліть info.php одразу після використання. Цей файл розкриває конфіденційні деталі конфігурації сервера, які можуть використовуватися зловмисниками.

sudo rm /var/www/html/info.php

Метод 3: Використання php -r (швидка одна команда)

php -r "echo php_ini_loaded_file();"

Це виводить шлях завантаженого файлу php.ini безпосередньо в ваш термінал — без необхідності створення файлу.

Типові розташування php.ini за платформами

Платформа / НалаштуванняТиповий шлях 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. Редагування файлу php.ini

Крок 1: Спочатку створіть резервну копію

Перед внесенням будь-яких змін завжди створюйте резервну копію:

sudo cp /etc/php/8.2/apache2/php.ini /etc/php/8.2/apache2/php.ini.bak

Це дозволяє вам швидко відновити вихідну конфігурацію, якщо щось піде не так.

Крок 2: Відкрийте файл у текстовому редакторі

Використовуйте nano для зручного досвіду для початківців:

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

Або використовуйте vim для більш просунутого редагування:

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

Крок 3: Навігація та редагування директив

Файл php.ini великий (часто 1500+ рядків). Використовуйте функцію пошуку вашого редактора, щоб перейти до конкретних директив:

  • У nano: Натисніть CTRL + W, потім введіть назву директиви (наприклад, memory_limit)
  • У vim: Натисніть /, потім введіть назву директиви

Крок 4: Збереження та вихід

  • nano: Натисніть CTRL + X, потім Y, потім Enter
  • vim: Натисніть ESC, введіть :wq, потім натисніть Enter

4. Ключові директиви php.ini пояснені

Ось детальний розбір найважливіших php.ini директив, які ви повинні знати та налаштувати:

Обмеження пам’яті та ресурсів

; 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

Параметри завантаження файлів

; 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

> Практичне правило: post_max_size завжди повинна бути рівною або більшою за upload_max_filesize. Якщо post_max_size менша, завантаження файлів мовчки не вдадуться.

Звітування про помилки та логування

; ---- 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

Управління сеансами

; 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 (прискорювач продуктивності)

OPcache значно покращує продуктивність PHP, зберігаючи попередньо скомпільований байт-код скриптів у спільній пам’яті:

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. Перезавантаження вашого веб-сервера

Зміни до php.ini не набирають чинності, поки ви не перезавантажите відповідний сервіс. Використовуйте відповідну команду для вашої конфігурації:

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

Graceful Reload (Zero Downtime)

Для виробничих серверів використовуйте graceful reload, щоб уникнути розриву активних з’єднань:

# Apache graceful reload
sudo systemctl reload apache2

# PHP-FPM graceful reload
sudo systemctl reload php8.2-fpm

Перевірка запуску сервісів

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

6. Перевірка ваших змін

Після перезавантаження сервера підтвердіть, що ваші нові параметри активні, використовуючи один із цих методів:

Метод 1: Command Line Grep

# 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'

Метод 2: phpinfo() Page

Тимчасово створіть файл info.php (не забудьте видалити його потім) і шукайте ваші змінені директиви. Змінені значення з’являтимуться в колонках "Local Value" та "Master Value".

Метод 3: PHP One-Liner

php -r "echo ini_get('memory_limit');"

7. Поширені поради з оптимізації php.ini

Використання .htaccess для перевизначення php.ini (лише Apache)

Якщо ви на спільному хостингу або не маєте доступу root, ви можете перевизначити певні php.ini параметри через .htaccess:

php_value memory_limit 256M
php_value upload_max_filesize 64M
php_value post_max_size 64M
php_value max_execution_time 120

> Примітка: це працює лише якщо AllowOverride увімкнено і хостинг-провайдер дозволяє перевизначення директив PHP.

Використання ini_set() у коді PHP

Для параметрів, специфічних для додатку, ви можете перевизначити php.ini значення під час виконання у ваших скриптах PHP:

<?php
ini_set('memory_limit', '512M');
ini_set('max_execution_time', '300');
?>

Файли php.ini для кожної директорії (PHP-FPM)

З PHP-FPM ви можете застосувати різні php.ini параметри до різних віртуальних хостів або директорій, налаштовуючи файли пулу в /etc/php/8.2/fpm/pool.d/. Це особливо корисно при розміщенні кількох додатків з різними вимогами.

Якщо ви керуєте кількома PHP додатками, VPS з cPanel значно спрощує керування параметрами PHP для кожного домену через графічний інтерфейс без ручного редагування файлів конфігурації.

8. Посилення безпеки через php.ini

Правильна конфігурація php.ini — один з найефективніших способів посилити ваше PHP середовище проти поширених атак.

Вимкніть небезпечні функції

; 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

Обмежте доступ до файлової системи

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

Приховайте інформацію про версію PHP

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

Вимкніть віддалене включення файлів

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

Посиліть безпеку сесій

session.cookie_httponly = On
session.cookie_secure = On
session.use_strict_mode = On
session.cookie_samesite = "Strict"

> Корисна порада: Якщо ви запускаєте сайт електронної комерції або обробляєте конфіденційні дані користувачів, поєднайте вашу посилену php.ini з дійсним SSL сертифікатом для шифрування всіх даних під час передачі. HTTPS є обов’язковим для того, щоб session.cookie_secure = On працював правильно.

9. Поширені помилки php.ini, яких слід уникати

ПомилкаЧому це проблемаВиправлення
Встановлення memory_limit = -1 у productionДозволяє скриптам споживати невмежену RAM, що призводить до збоїв сервераВстановіть розумну межу, наприклад 256M або 512M
display_errors = On у productionРозкриває конфіденційні шляхи файлів та облікові дані бази даних користувачамВстановіть на Off та використовуйте log_errors = On замість цього
post_max_size < upload_max_filesizeВикликає мовчазні збої завантаженняЗавжди встановлюйте post_max_sizeupload_max_filesize
Редагування неправильного php.iniЗміни не застосовуються до веб-запитівВикористовуйте phpinfo() для підтвердження того, який файл завантажується вашим веб-сервером
Невідновлення сервера після змінСтарі параметри залишаються активнимиЗавжди перезавантажуйте Apache або PHP-FPM після редагування
Залишення info.php на серверіРозкриває повну конфігурацію сервера зловмисникамВидаліть негайно після використання
Встановлення allow_url_include = OnДозволяє атаки Remote File Inclusion (RFI)Завжди тримайте це Off

10. Висновок

Оволодіння конфігурацією php.ini є фундаментальною навичкою для будь-якого системного адміністратора або веб-розробника. Правильні параметри можуть означати різницю між повільним, вразливим сервером та швидким, безпечним, готовим до виробництва середовищем.

Для підсумування ключових висновків:

  • Завжди робіть резервну копію php.ini перед внесенням змін
  • Визначте правильний файл — CLI та веб-сервер SAPI часто використовують різні файли php.ini
  • Налаштуйте обмеження ресурсів (memory_limit, max_execution_time, upload_max_filesize) відповідно до потреб вашої програми
  • Посиліть безпеку, вимкнувши небезпечні функції, приховавши інформацію про версію та обмеживши доступ до файлів
  • Увімкніть OPcache для значного підвищення продуктивності
  • Ніколи не виводьте помилки у виробництві — замість цього логуйте їх
  • Перезавантажте веб-сервер після кожної зміни та перевірте за допомогою phpinfo() або php -i

Середовище хостингу, яке ви обираєте, також відіграє важливу роль у тому, наскільки контролю ви маєте над конфігурацією PHP. З Виділеними серверами від AlexHost ви отримуєте повний, необмежений доступ до конфігурації PHP вашого сервера — ідеально для високонавантажених програм зі складними вимогами. Для менших проектів або команд, які тільки починають, плани Спільного веб-хостингу забезпечують керовані середовище, де багато параметрів PHP попередньо оптимізовані для вас.

Регулярно переглядайте конфігурацію php.ini у міру розвитку вашої програми, оновлення версій PHP та зміни закономірностей трафіку. Добре налаштоване середовище PHP — це не одноразове налаштування — це постійна практика, яка приносить дивіденди в продуктивності, надійності та безпеці.