PHP не кусается: как перестать бояться ошибок и начать их понимать
Вы когда-нибудь видели вместо своего сайта пустой белый лист? Или сообщение вроде Parse error: syntax error, unexpected '}' и чувствовали, как внутри всё холодеет? Добро пожаловать в клуб! Каждый PHP-разработчик, от новичка до гуру, проходит через это. Но хорошая новость в том, что большинство ошибок — это не злые проклятия компьютера, а подсказки. Они говорят: «Эй, я не понял, что ты от меня хочешь. Посмотри сюда!».
В этой статье мы разберём самые популярные ошибки PHP, которые пугают начинающих. Мы не просто перечислим их — мы научимся читать сообщения об ошибках, понимать их суть и исправлять. После прочтения вы будете смотреть на Fatal error с лёгкой улыбкой, а не с ужасом. Поехали!
1. Анатомия ошибки PHP: учимся читать сообщения
Прежде чем разбирать конкретные ошибки, давайте поймём, как устроено сообщение об ошибке в PHP. Оно всегда содержит несколько ключевых частей:
- Тип ошибки (Parse error, Fatal error, Warning, Notice)
- Сообщение — что именно пошло не так
- Файл — в каком файле это случилось
- Строка — номер строки, где ошибка была обнаружена
Пример:
Parse error: syntax error, unexpected '}' in /var/www/script.php on line 15
Здесь PHP чётко говорит: «В файле script.php на 15-й строке я встретил закрывающую фигурную скобку }, которую не ожидал увидеть». Значит, где-то выше мы забыли открыть скобку или поставили лишнюю. Идём в строку 15 и смотрим контекст.
2. Синтаксические ошибки (Parse Error) — корень зла для новичков
Самые частые гости на вечеринке начинающего PHP-программиста — это синтаксические ошибки. PHP — язык с чётким синтаксисом, и если вы пропустили точку с запятой или забыли закрыть скобку, он сразу же на это укажет.
2.1. Пропущенная точка с запятой
Классика жанра. Каждая инструкция в PHP должна заканчиваться точкой с запятой (;).
Неправильно:
<?php
echo "Привет, мир!"
echo "Как дела?";
?>
Ошибка: Parse error: syntax error, unexpected 'echo' (T_ECHO)
Правильно:
<?php
echo "Привет, мир!";
echo "Как дела?";
?>
2.2. Незакрытые кавычки или скобки
Ещё одна популярная ловушка. Если вы открыли строку двойной кавычкой, но забыли её закрыть, PHP «съест» весь остаток кода до следующей кавычки, что приведёт к странной ошибке.
Неправильно:
<?php
$text = "Привет, мир;
echo $text;
?>
Ошибка: Parse error: syntax error, unexpected end of file (потому что PHP ищет закрывающую кавычку до конца файла)
Правильно:
<?php
$text = "Привет, мир";
echo $text;
?>
2.3. Лишние или пропущенные фигурные скобки
В циклах и условиях фигурные скобки определяют блок кода. Одна лишняя — и всё ломается.
Неправильно:
<?php
if ($a > 5) {
echo "Больше 5";
}
} // Лишняя скобка
?>
Ошибка: Parse error: syntax error, unexpected '}'
Совет: Всегда используйте редактор кода с подсветкой синтаксиса. Он покажет, где скобка непарная. Или считайте скобки вручную: сколько открыли, столько и закрыли.
3. Фатальные ошибки (Fatal Error) — когда скрипт умирает
Фатальная ошибка — это серьёзная проблема. PHP не может продолжить выполнение, и скрипт полностью останавливается. Белый экран — это часто именно Fatal Error, но вывод ошибок может быть отключён.
3.1. Вызов несуществующей функции
Вы попытались вызвать функцию, которую PHP не знает. Либо вы её не объявили, либо ошиблись в названии.
Пример:
<?php
my_custom_function();
?>
Ошибка: Fatal error: Uncaught Error: Call to undefined function my_custom_function()
Решение: Проверьте, объявлена ли функция. Если она в другом файле, подключите его через require или include.
3.2. Ошибка подключения файла (require)
Если вы используете require для подключения файла, а файла не существует, PHP выдаст фатальную ошибку.
Пример:
<?php
require "config.php";
echo "Это не выполнится";
?>
Ошибка: Fatal error: require(): Failed opening required 'config.php'
Решение: Проверьте путь к файлу. Используйте include вместо require, если файл не обязателен, или require_once, чтобы избежать повторного подключения.
4. Предупреждения (Warning) и уведомления (Notice) — не смертельно, но важно
Warning и Notice — это не критические ошибки. Скрипт продолжит работу, но может вести себя непредсказуемо. Игнорировать их — плохая практика.
4.1. Undefined variable (Notice)
Вы пытаетесь использовать переменную, которой не присвоили значение.
Пример:
<?php
echo $name; // $name не определена
?>
Ошибка: Notice: Undefined variable: name
Решение: Всегда инициализируйте переменные перед использованием: $name = '';
4.2. Undefined index / offset (Warning)
Вы обращаетесь к элементу массива, которого не существует.
Пример:
<?php
$user = ['name' => 'Иван'];
echo $user['age']; // Ключа 'age' нет
?>