Как включить отображение ошибок 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() не работают из-за ограничений хостинга.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги
Асинхронное программирование в C++: полное руководство с примерами