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

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

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

Як увімкнути звітування про помилки PHP: Повний посібник розробника

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

Що таке звітування про помилки PHP і чому це важливо?

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

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

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

Рівні помилок PHP в стислому вигляді

PHP категоризує помилки на окремі рівні, кожен з яких контролюється незалежно:

КонстантаОпис
E_ERRORКритичні помилки виконання, які зупиняють виконання скрипту
E_WARNINGНекритичні попередження під час виконання
E_NOTICEНезначні сповіщення про потенційні проблеми у коді
E_DEPRECATEDПопередження про функції, які будуть видалені в майбутніх версіях PHP
E_PARSEПомилки синтаксичного аналізу на етапі компіляції
E_ALLУсі помилки, попередження та сповіщення разом

Використання E_ALL під час розробки гарантує, що ви виловите кожну можливу проблему перед тим, як вона потрапить у виробництво.

Метод 1: Увімкнення звітування про помилки PHP безпосередньо у вашому скрипті

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

<?php
error_reporting(E_ALL);          // Report all types of errors
ini_set('display_errors', 1);    // Display errors directly in the browser
ini_set('display_startup_errors', 1); // Also show errors during PHP startup
?>

Що робить кожен рядок

  • error_reporting(E_ALL) — Встановлює рівень звітування про помилки для захоплення кожної категорії помилки, включаючи повідомлення, попередження, сповіщення про застарілість та критичні помилки. Ви також можете комбінувати конкретні константи за допомогою побітових операторів, наприклад E_ALL & ~E_NOTICE для виключення повідомлень.
  • ini_set('display_errors', 1) — Наказує PHP виводити повідомлення про помилки безпосередньо в браузер або командний рядок. Встановлення цього значення на 0 приховує помилки від виводу без вимкнення їх логування.
  • ini_set('display_startup_errors', 1) — Увімкнює звітування про помилки, які виникають під час послідовності запуску PHP, яку display_errors сам по собі не охоплює.

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

Коли використовувати цей метод

Цей метод найкраще підходить для:

  • Швидкого налагодження одного скрипту або модуля
  • Середовищ спільного хостингу, де у вас немає доступу до php.ini
  • Тимчасових сеансів налагодження під час активної розробки

Метод 2: Увімкнення звітування про помилки PHP через php.ini (рекомендується)

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

Крок 1: Знайдіть свій файл php.ini

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

<?php
phpinfo();
?>

Завантажте цей файл на сервер, відкрийте його в браузері та знайдіть запис «Loaded Configuration File». Це відобразить точний шлях до активного файлу php.ini.

Типові розташування за замовчуванням включають:

  • Linux (Apache): /etc/php/8.x/apache2/php.ini
  • Linux (CLI): /etc/php/8.x/cli/php.ini
  • Linux (Nginx + PHP-FPM): /etc/php/8.x/fpm/php.ini
  • Windows (XAMPP): C:xamppphpphp.ini
  • macOS (MAMP): /Applications/MAMP/conf/php/php.ini

> Нагадування про безпеку: Видаліть або обмежте доступ до вашого файлу phpinfo() одразу після використання. Він розкриває детальні дані конфігурації сервера, які можуть бути використані зловмисниками.

Крок 2: Редагуйте файл php.ini

Відкрийте файл php.ini за допомогою текстового редактора або через SSH на вашому сервері:

sudo nano /etc/php/8.x/apache2/php.ini

Знайдіть наступні директиви та оновіть їх як показано:

До (типові налаштування для виробництва):

display_errors = Off
display_startup_errors = Off
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
log_errors = On

Після (конфігурація розробки):

display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php/error.log

Крок 3: Перезавантажте веб-сервер

Після збереження змін перезавантажте веб-сервер, щоб застосувати нову конфігурацію:

Для Apache:

sudo systemctl restart apache2

Для Nginx з PHP-FPM:

sudo systemctl restart php8.x-fpm
sudo systemctl restart nginx

Для XAMPP на Windows:

Відкрийте панель керування XAMPP та натисніть Stop, а потім Start поруч з Apache.

Метод 3: Увімкнення звітування про помилки через .htaccess (тільки Apache)

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

php_flag display_errors On
php_flag display_startup_errors On
php_value error_reporting 32767
php_flag log_errors On
php_value error_log /home/yourusername/logs/php_errors.log

Числове значення 32767 відповідає E_ALL у PHP. Цей метод особливо корисний на планах Спільного веб-хостингу, де доступ до конфігурації на рівні сервера обмежений.

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

Метод 4: Налаштування звітування про помилки в локальних середовищах розробки

Якщо ви запускаєте локальний стек розробки, такий як XAMPP, MAMP або WAMP, процес простий.

XAMPP (Windows / Linux / macOS)

  1. Відкрийте XAMPP Control Panel
  2. Натисніть Config поруч з Apache
  3. Виберіть PHP (php.ini) з випадаючого меню
  4. Застосуйте параметри розробки, описані в Методі 2
  5. Перезавантажте Apache з Control Panel

MAMP (macOS)

  1. Відкрийте MAMP Preferences
  2. Перейдіть на вкладку PHP
  3. Натисніть кнопку php.ini, щоб відкрити файл конфігурації
  4. Застосуйте параметри розробки та збережіть
  5. Перезавантажте сервери MAMP

Середовища на основі Docker

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

RUN echo "display_errors = On" >> /usr/local/etc/php/conf.d/custom.ini
RUN echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/custom.ini

Тестування конфігурації звітування про помилки

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

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Intentional error: undefined variable
echo $undefinedVariable;

// Intentional warning: wrong argument count
strlen();

// Intentional notice: undefined array key
$array = [];
echo $array['missing_key'];
?>

Якщо звітування про помилки налаштовано правильно, PHP відобразить повідомлення та попередження для кожної з цих проблем. Ви повинні побачити вихідні дані, подібні до:

Notice: Undefined variable: undefinedVariable in /var/www/html/test.php on line 5
Warning: strlen() expects exactly 1 argument, 0 given in /var/www/html/test.php on line 8
Notice: Undefined index: missing_key in /var/www/html/test.php on line 12

Вимкнення відображення помилок та логування помилок у виробництві

Коли ваш додаток готовий до розгортання, ви ніколи не повинні відображати повідомлення про помилки кінцевим користувачам. Розкриті помилки можуть виявити:

  • Абсолютні шляхи файлів на сервері
  • Назви таблиць бази даних та структури запитів
  • Версію PHP та деталі розширень
  • Логіку додатку та дані конфігурації

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

Рекомендовані параметри php.ini для виробництва

display_errors = Off
display_startup_errors = Off
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php/production_errors.log

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

Створення та захист файлу журналу помилок

# Create the log directory
sudo mkdir -p /var/log/php

# Create the log file
sudo touch /var/log/php/production_errors.log

# Set appropriate ownership
sudo chown www-data:www-data /var/log/php/production_errors.log

# Restrict permissions
sudo chmod 640 /var/log/php/production_errors.log

Моніторинг журналів помилок

Ви можете моніторити журнал помилок PHP у реальному часі за допомогою команди tail:

tail -f /var/log/php/production_errors.log

Це особливо корисно на Виділеному сервері, де у вас є повний доступ root та ви можете налаштувати ротацію журналів, сповіщення та інструменти моніторингу, такі як Logwatch або Fail2Ban.

PHP Error Reporting: Development vs. Production Settings Summary

ПараметрРозробкаВиробництво
display_errorsOnOff
display_startup_errorsOnOff
error_reportingE_ALLE_ALL
log_errorsOnOn
error_logОпціональноОбов’язково

Advanced: Custom Error Handlers

Для більш складних додатків PHP дозволяє визначити функцію обробки помилок користувача за допомогою set_error_handler(). Це дає вам повний контроль над тим, як помилки обробляються, форматуються та зберігаються.

<?php
function customErrorHandler(int $errno, string $errstr, string $errfile, int $errline): bool {
    $timestamp = date('Y-m-d H:i:s');
    $message = "[$timestamp] Error $errno: $errstr in $errfile on line $errline" . PHP_EOL;

    // Log to a custom file
    error_log($message, 3, '/var/log/php/custom_errors.log');

    // Optionally display a friendly message to users in production
    if (ini_get('display_errors')) {
        echo "<pre>$message</pre>";
    }

    return true; // Prevent PHP's default error handler from running
}

set_error_handler('customErrorHandler');
?>

Користувацькі обробники помилок особливо цінні при розробці додатків, які вимагають структурованого логування, інтеграції з сервісами моніторингу, такими як Sentry або Datadog, або зручних сторінок помилок.

Вибір правильного хостинг-середовища для розробки PHP

Ваше хостинг-середовище відіграє критичну роль у тому, наскільки ефективно ви можете налаштувати та керувати звітуванням про помилки PHP. Ось короткий огляд того, що пропонує кожне середовище:

  • Спільний веб-хостинг — Обмежений доступ до php.ini; покладайтеся на .htaccess або конфігурацію в скрипті. Найкраще для невеликих проектів.
  • VPS Hosting — Повний root-доступ, повний контроль над php.ini, PHP-FPM пулами та конфігурацією сервера. Ідеально для професійної розробки PHP.
  • VPS з cPanel — Поєднує контроль на рівні root з зручністю графічного інтерфейсу для керування версіями PHP та налаштуваннями для кожного домену.
  • Виділені сервери — Максимальна продуктивність та ізоляція; найкраще для високонавантажених PHP-додатків зі складними вимогами до логування та моніторингу.

Якщо ви серйозно ставитеся до розробки PHP і вам потрібне стабільне, налаштовуване середовище з повним контролем над стеком вашого сервера, VPS або виділений сервер — це правильний вибір.

Часто задавані питання

Чому мої помилки PHP не відображаються навіть після включення звітування про помилки в моєму скрипті?

Це зазвичай викликано директивою php.ini, яка перевизначає ваші внутрішні налаштування скрипту, або помилкою синтаксису, яка виникає до того, як буде досягнуто ваш виклик error_reporting(). Перевірте ваші налаштування php.ini і розгляньте можливість включення звітування про помилки на рівні сервера.

Чи можу я включити звітування про помилки лише для одного каталогу?

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

Чи сповільнює включення звітування про помилки мою програму?

Незначно. Вплив на продуктивність самого звітування про помилки мінімальний. Однак запис у файли журналу при кожному запиті може додати невелику I/O надбавку в середовищах з високим трафіком.

Яка різниця між display_errors та log_errors?

display_errors відправляє вихід помилок у браузер або командний рядок. log_errors записує помилки у файл. У виробництві завжди використовуйте log_errors = On з display_errors = Off.

Висновок

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

Ключові висновки з цього посібника:

  1. Використовуйте error_reporting(E_ALL) та ini_set('display_errors', 1) для швидкого налагодження для кожного скрипту
  2. Змініть php.ini для постійного звітування про помилки на рівні сервера в середовищах розробки
  3. Використовуйте .htaccess коли у вас немає прямого доступу до php.ini на спільному хостингу
  4. Завжди вимикайте display_errors у виробництві та перенаправляйте вихід помилок до безпечного файлу журналу
  5. Розгляньте користувацький обробник помилок для розширеного логування, моніторингу та зручних для користувача сторінок помилок

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

Опанувавши звітування про помилки PHP — і знаючи, коли його включати або придушувати — ви створюєте більш надійні, безпечні та придатні для обслуговування додатки з самого початку.