Вступление: почему одни бросают PHP, а другие зарабатывают на нём
Вы решили изучать PHP. Отличный выбор! На этом языке работает 78% всех сайтов в интернете — от простых блогов до гигантов вроде Facebook (ну, почти). Но есть одна проблема: многие новички совершают одни и те же грабли, которые превращают обучение в ад.
Почему так происходит? PHP — язык коварный. Он прощает глупые ошибки, но не прощает незнания базовых принципов. Вы написали код, он работает, сайт грузится — и вы думаете, что всё круто. А через месяц вы не можете разобраться в собственной простыне из 500 строк, а ваш сайт взламывают за 5 минут.
В этой статье я разберу 5 самых частых ошибок при изучении PHP, которые допускают новички. Я покажу реальные примеры кода, объясню, почему так делать плохо, и дам конкретные решения. Если вы узнали себя хотя бы в одном пункте — не расстраивайтесь, это нормально. Просто исправляйте.
Ошибка №1: Смешивание PHP и HTML в одном файле без структуры
Это классика. Новичок пишет что-то вроде:
<?php
$username = "Иван";
echo "<html><body><h1>Привет, " . $username . "!</h1>";
?>
<p>Это текст после PHP</p>
<?php
echo "</body></html>";
?>
Вроде работает. Но попробуйте добавить сюда цикл, условие, десять страниц — и вы утонете в каше из тегов и echo. Такой код невозможно читать, поддерживать и отлаживать.
Почему это плохо?
- Нарушается принцип разделения ответственности (MVC).
- При малейшем изменении дизайна вы переписываете половину логики.
- Редакторы кода сходят с ума от смешанных тегов.
Как правильно?
Используйте шаблонизацию. Даже без фреймворков можно отделить логику от представления:
<?php
// logic.php
$data = ['name' => 'Иван', 'age' => 25];
include 'template.php';
?>
<!-- template.php -->
<!DOCTYPE html>
<html>
<body>
<h1><?= htmlspecialchars($data['name']) ?></h1>
<p>Возраст: <?= $data['age'] ?> лет</p>
</body>
</html>
Обратите внимание: я использовал короткий тег <?= и функцию htmlspecialchars() — это уже защита от XSS. Ошибки при изучении PHP часто связаны именно с игнорированием безопасности.
Ошибка №2: Игнорирование SQL-инъекций (самая опасная)
В 2025 году писать такой код — преступление:
$id = $_GET['id'];
$query = "SELECT * FROM users WHERE id = $id";
$result = mysqli_query($conn, $query);
Если передать в URL ?id=1 OR 1=1, вы получите всех пользователей. Если передать ?id=1; DROP TABLE users — прощай база. Это SQL-инъекция, и это первое, что проверяют хакеры.
Как исправить?
Используйте подготовленные запросы (prepared statements). Вот как это делается в современном PHP с PDO:
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id');
$stmt->execute(['id' => $_GET['id']]);
$user = $stmt->fetch();
База данных сама экранирует значение. Инъекция становится невозможна. Запомните: никогда не подставляйте данные от пользователя напрямую в SQL-запрос. Это одна из главных ошибок при изучении PHP, которая может стоить вам сайта.
Ошибка №3: Использование устаревших функций и стилей
В интернете полно туториалов 2010 года, где учат:
mysql_connect()— удалено в PHP 7.0.ereg()вместоpreg_match().split()вместоexplode().- Закрытие тега
?>в конце чистого PHP-файла.
Почему это плохо? Потому что:
- Устаревшие функции удаляются в новых версиях PHP.
- Они часто медленнее и менее безопасны.
- Вы учитесь неправильным паттернам.
Пример: закрытие тега ?> в конце файла. Если после него случайно окажется пробел или пустая строка, PHP начнёт вывод до того, как вы отправите заголовки HTTP. Это вызовет ошибку "headers already sent".
Что делать?
Всегда проверяйте актуальность источника. Лучшие ресурсы: официальная документация PHP (php.net), книги 2020+ года, курсы на современных платформах. И помните: чистый PHP-файл не должен закрываться тегом ?>.
Ошибка №4: Отсутствие обработки ошибок и исключений
Новички часто пишут так:
$file = fopen('data.txt', 'r');
$content = fread($file, filesize('data.txt'));
fclose($file);
echo $content;
Если файла не существует — вы получите фатальную ошибку и белый экран. Если нет прав на чтение — то же самое.
Как правильно?
Используйте try-catch и проверки:
try {
if (!file_exists('data.txt')) {
throw new Exception('Файл не найден');
}
if (!is_readable('data.txt')) {
throw new Exception('Нет прав на чтение');
}
$content = file_get_contents('data.txt');
echo htmlspecialchars($content);
} catch (Exception $e) {
error_log($e->getMessage());
echo 'Произошла ошибка. Попробуйте позже.';
}
Обработка ошибок — это не роскошь, а необходимость. Особенно если вы пишете код для реального проекта. Ошибки при изучении PHP в этой области приводят к тому, что пользователи видят "белый экран смерти" вместо красивой страницы.
Ошибка №5: Пренебрежение типами данных и строгим режимом
PHP — язык с динамической типизацией. Это удобно, но опасно. Посмотрите:
function add($a, $b) {
return $a + $b;
}
echo add('5', '10 apples'); // 15! PHP сам привёл строки к числам
Вроде