Avatar ·

Как включить отображение ошибок PHP? Пытаюсь найти синтаксическую ошибку, но вижу пустую страницу

Всем привет! Я новичок в PHP и пишу свой первый скрипт. У меня проблема: когда в коде есть ошибка, браузер показывает просто пустую белую страницу вместо сообщения об ошибке. Я не понимаю, что именно пошло не так. Вот пример моего кода (файл test.php): ```php ``` Когда я открываю этот файл в браузере, я вижу только "Привет, Иван! Сегодня 2025-03-15", а дальше ничего. Страница просто обрывается. Я проверил все строки, но не могу найти ошибку. Вроде бы всё правильно написано. Я слышал, что можно включить отображение ошибок, но не знаю как. Пробовал добавить `error_reporting(E_ALL);` в начало файла, но это не помогло. Может быть, нужно что-то менять в php.ini? Или есть другой способ увидеть сообщение об ошибке? Подскажите, пожалуйста, как сделать так, чтобы PHP показывал ошибки прямо на странице? Очень неудобно гадать, где именно я ошибся. Заранее спасибо за помощь! <<>>

Как включить отображение ошибок PHP

Проблема, с которой вы столкнулись, очень распространена среди начинающих PHP-разработчиков. По умолчанию на многих серверах отображение ошибок отключено в целях безопасности — чтобы злоумышленники не могли увидеть пути к файлам или структуру базы данных. Но для разработки это крайне неудобно. Давайте разберём все способы решения.

1. Включение через PHP-код (рекомендуется для одного скрипта)

Самый простой способ — добавить в начало вашего PHP-файла следующие строки:

<?php
// Включаем отображение всех ошибок
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>

Важно! Эти строки должны быть самыми первыми, до любого другого кода, включая HTML. Если ошибка произошла до их выполнения — вы её не увидите. Вот как должен выглядеть ваш исправленный файл:

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

$name = "Иван";
echo "Привет, $name!";
echo "Сегодня " . date("Y-m-d");
$number = 5;  // Вот здесь была пропущена точка с запятой
echo "Число: $number";
?>

После этого вы увидите примерно такое сообщение:

Parse error: syntax error, unexpected 'echo' (T_ECHO) in /var/www/html/test.php on line 8

2. Включение через php.ini (для всего сервера)

Если у вас есть доступ к конфигурации PHP, откройте файл php.ini (обычно находится в /etc/php/ или /usr/local/etc/php/) и найдите/измените следующие строки:

display_errors = On
display_startup_errors = On
error_reporting = E_ALL

После изменений перезапустите веб-сервер:

sudo systemctl restart apache2   # для Apache
sudo systemctl restart nginx     # для Nginx с PHP-FPM

3. Включение через .htaccess (для Apache)

Если у вас Apache и нет доступа к php.ini, создайте или отредактируйте файл .htaccess в корне сайта:

php_flag display_errors on
php_flag display_startup_errors on
php_value error_reporting 32767

Число 32767 — это числовой эквивалент E_ALL для текущей версии PHP.

4. Для синтаксических ошибок (как в вашем случае)

Обратите внимание: синтаксические ошибки (пропущенная точка с запятой, незакрытая скобка) не всегда можно отловить через ini_set(), потому что код даже не начинает выполняться. В этом случае помогают:

  • Проверка через командную строку: php -l test.php — покажет синтаксические ошибки без выполнения кода.
  • Включение display_startup_errors в php.ini или .htaccess.
  • Использование IDE с подсветкой синтаксиса (PhpStorm, VS Code) — они подсвечивают такие ошибки сразу.

Важные предостережения

Никогда не оставляйте включённое отображение ошибок на боевом (production) сервере! Это серьёзная уязвимость. Для продакшена используйте:

ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', '/path/to/error.log');

Так ошибки будут записываться в лог-файл, но не показываться пользователям.

<<>>

Использование error_get_last() и пользовательского обработчика

Если стандартные методы не помогают (например, на заблокированном хостинге), можно использовать альтернативные подходы.

1. Функция error_get_last()

Добавьте в конец скрипта вызов этой функции — она вернёт последнюю произошедшую ошибку:

<?php
// Ваш код
$number = 5
echo "Число: $number";

// Проверка ошибок
$error = error_get_last();
if ($error) {
    echo "<pre>";
    print_r($error);
    echo "</pre>";
}
?>

2. Пользовательский обработчик ошибок

Можно создать свою функцию для логирования ошибок:

<?php
function customErrorHandler($errno, $errstr, $errfile, $errline) {
    echo "<b>Ошибка:</b> [$errno] $errstr в файле $errfile на строке $errline<br>";
    return true; // Не даём выполниться стандартному обработчику
}
set_error_handler("customErrorHandler");

// Ваш код
$number = 5
echo "Число: $number";
?>

3. Проверка через командную строку

Самый надёжный способ для синтаксических ошибок — запустить PHP из терминала:

php -l test.php
php -f test.php

Первая команда проверит синтаксис, вторая — выполнит скрипт и покажет все ошибки в консоли.

Эти методы особенно полезны, когда у вас нет доступа к php.ini или .htaccess, а стандартные ini_set() не работают из-за ограничений хостинга.