6.1.3 Основні параметри та конфігурація php.ini

TheHost php.ini Banner

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

Розташування файлу конфігурації PHP залежить від веб-сервера. Щоб змінити його налаштування, його потрібно відредагувати за допомогою будь-якого текстового редактора.

У більшості випадків, необхідність редагувати PHP.ini виникає або при розгортанні сервера, або для застосування рекомендацій щодо покращення роботи Вашого сайту від CMS.

Рекомендується ознайомлення з офіційною документацією і, при необхідності, з повним [списком](https://www.php.net/manual /en/ini.list.php) можливих директив.

Основні змінні файлу конфігурації

У цьому матеріалі ми ознайомимося з основними базовими змінними, зміна яких може знадобитися в переважній більшості випадків:

1. Обмеження на використання ресурсів:

  • memory_limit=. Це обмеження встановлює максимальний обсяг пам’яті (мегабайт), який скрипт PHP може використовувати під час виконання. Якщо скрипт намагається використати більше пам’яті, ніж зазначено у цій змінній, виникає фатальна помилка.
  • upload_max_filesize=. Визначає максимальний розмір файлів, що завантажуються через HTTP POST. Файли, що перевищують це значення, будуть відхилені під час завантаження.
  • post_max_size=. Встановлює максимальний розмір даних, який можна надіслати через метод POST в PHP-скриптах. Якщо надіслані дані перевищують це значення, вони будуть обрізані.
  • max_execution_time=. Визначає максимальний час (у секундах), протягом якого PHP-скрипт може виконуватись. Якщо скрипт не завершується протягом цього часу, його буде автоматично перервано.
  • max_input_time=. Встановлює максимальний час (у секундах), протягом якого PHP-скрипт може приймати вхідні дані (наприклад, форми). Якщо час перевищено, PHP завершує виконання сценарію.
  • max_input_vars=. Кількість вхідних змінних, які можуть бути прийняті в одному запиті (обмеження накладається на кожну із глобальних змінних $_GET, $_POST та $_COOKIE окремо).

2. Робота з помилками:

  • display_errors=. Визначає, чи помилки PHP повинні виводитися безпосередньо веб-сторінкою чи ні. При значенні On помилки будуть виводитися безпосередньо на відкриту в браузері сторінку, за їх наявності.
  • error_reporting=. Визначає, які типи помилок PHP будуть реєструватися і виводитися (якщо display_errors встановлений в On). Зазвичай рекомендується встановити значення E_ALL для відстеження всіх типів помилок у процесі розробки та тестування. На виробничому сервері може бути корисно встановити більш суворі налаштування, такі як E_ERROR або E_WARNING, щоб уникнути виведення непотрібної інформації.

3. Безпека:

  • register_globals=. Визначає, чи дозволено автоматичне створення глобальних змінних із вхідних даних, таких як запити GET, POST та куки. Починаючи з версії PHP 5.4, за замовчуванням встановлена в Off, оскільки її включення може викликати проблеми з безпекою.
  • session.save_path=. Визначає шлях до каталогу, в якому PHP зберігає дані сеансу для тимчасового зберігання. Каталог повинен мати відповідні права та дозволи. Значення шляху має бути у лапках.

4. Пошта:

  • sendmail_path=. Визначає шлях до файлу sendmail, що виконується, який зазвичай використовується PHP для відправки електронної пошти. Значення шляху має бути у лапках.

За допомогою php.ini також можна активувати PHP-розширення на сервері після їх встановлення. Наприклад:

extension=intl.so
extension=imagick.so

або:

zend_extension = /usr/lib/php/20210902/ioncube_loader_lin_8.1.so

Конкретні директиви залежать від конфігурації сервера та документації відповідних плагінів.

php.ini на хостингу

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

На нашому shared-хостингу, php.ini за умовчанням розташований на шляху ~/php-bin/php.ini і виглядає наступним чином :

register_globals=Off
display_errors=Off
log_errors=On
max_execution_time=60
memory_limit=512M
upload_max_filesize=196M
post_max_size=256M
max_input_vars=20480

sendmail_path = "/usr/sbin/sendmail -t -i -f examplemail@exampledomain.com"
session.save_path = "/var/www/exampleuser/data/bin-tmp"

Більшість доступних налаштувань PHP можна змінити засобами панелі за допомогою вкладки Налаштування PHP.

php.ini на віртуальному/виділеному сервері

На віртуальних/виділених серверах локація php.ini може суттєво відрізнятися. Найпростіший метод виявити локацію файлу це підключитися за SSH та виконати таку команду:

  1. php --ini
Вивід
Configuration File (php.ini) Path: /etc/php/8.1/cli Loaded Configuration File: /etc/php/8.1/cli/php.ini

Порада: якщо на сервері встановлено кілька версій PHP, просто використовуйте команду такого вигляду:

  1. php-7.4 --ini

Де 7.4 необхідно замінити версією, яка Вам потрібна.

Після свіжої установки PHP, в конфігураційному файлі можуть взагалі відсутні будь-які директиви користувача. У такому випадку, PHP ініціалізуватиметься зі значеннями за замовчуванням.

Питання: які значення обмежень PHP варто вказати для стабільної роботи сервера?

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

  • memory_limit=. Не менше 1024 МБ і більше половини розміру ОЗУ сервера.
  • upload_max_filesize=. Не менше 1024 МБ.
  • post_max_size=. дорівнює або трохи вище значення upload_max_filesize=. Для 1024 у верхньому прикладі буде мати сенс сенс встановити приблизно на 1060.
  • max_execution_time=. Сильно залежить від контексту. Значення 300 секунд можна вважати середнім.
  • max_input_time=. 30 секунд, якщо немає інших вимог.
  • max_input_vars=. Багато CMS вимагають високих значень цієї змінної. Навіть 10240 як обмеження навряд чи призведе до негативних наслідків.

Важливо: після змін вказаних файлів, для застосування нових налаштувань необхідний перезапуск веб-сервера. Для ISPManager4, виконати це можна під root у розділі Сервіси. Для серверів без панелі це досягається за допомогою відповідних команд.