6.1.3 Основні параметри та конфігурація php.ini
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 та виконати таку команду:
- php --ini
ВивідConfiguration File (php.ini) Path: /etc/php/8.1/cli
Loaded Configuration File: /etc/php/8.1/cli/php.ini
Порада: якщо на сервері встановлено кілька версій PHP, просто використовуйте команду такого вигляду:
- 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 у розділі Сервіси. Для серверів без панелі це досягається за допомогою відповідних команд.