𝟭𝟬 𝗢𝗦𝗜𝗕𝗢𝗞 𝗣𝗛𝗣, 𝗞𝗢𝗧𝗢𝗥𝗬𝗘 𝗥𝗔𝚉𝗥𝗨𝗦𝗛𝗔𝗬𝗨𝗧 𝗥𝗘𝗔𝗟'𝗡𝗬𝗬𝗘 𝗣𝗥𝗢𝗝𝗘𝗞𝗧𝗬

Код работает на вашем компьютере. Вы пушите его на сервер. Всё ломается. В логах нет ошибок. Вы просто видите неверный результат.

Эти ошибки не из учебников. Они встречаются в реальных системах авторизации, магазинах и API. При проверке кода они выглядят нормально, но подводят в продакшене.

Вот ошибки с №11 по №20 и способы их исправления.

• Бесконечные циклы Забытый инкремент счетчика блокирует процесс PHP. Это может привести к падению всего сервера. Исправление: Всегда следите за тем, чтобы счетчики циклов увеличивались.

• Проблемы с регистром PHP воспринимает "Admin" и "admin" как разные строки. Это нарушает контроль доступа. Исправление: Используйте strtolower() перед сравнением строк.

• Математика и отсечение Приведение десятичного числа к (int) не округляет его, а просто отсекает дробную часть. Это приводит к финансовым ошибкам в биллинге. Исправление: Используйте round() или number_format().

• Ошибки JSON По умолчанию json_decode возвращает объект. Если попытаться использовать его как массив, скрипт упадет. Исправление: Передайте true вторым аргументом, чтобы получить массив.

• Риски XSS-атак Прямой вывод пользовательского ввода позволяет злоумышленникам внедрять скрипты. Исправление: Всегда используйте htmlspecialchars().

• Ошибки путей Относительные пути работают на локальной машине, но не работают на живых серверах. Исправление: Используйте константу DIR для указания абсолютных путей.

• Дублирование данных Пользователи часто дважды кликают по кнопке отправки. Это создает дубликаты записей в базе данных. Исправление: Сначала проверяйте наличие записи и используйте ограничение UNIQUE в вашей базе данных.

• Слияние массивов Функция array_merge() сбрасывает числовые ключи в ноль. Это разрушает структуру ваших данных. Исправление: Используйте оператор + или array_replace(), чтобы сохранить ключи.

• Невидимые ошибки Отключение вывода ошибок в продакшене полезно для безопасности. Но это плохо для отладки, если вы не записываете их в логи. Исправление: Установите log_errors в 1 и определите путь к error_log.

• Ссылки в циклах Цикл foreach изменяет копию данных, а не исходный массив. Исправление: Используйте символ & для создания ссылки, но всегда делайте unset переменной после завершения цикла.

Большинство этих ошибок не вызывают исключений. PHP продолжает работу, но выдает неверные результаты. Именно это делает их опасными.

Писать код легко. Написание кода, готового к продакшену, требует понимания того, как всё может сломаться.

Полное руководство читайте здесь: https://dev.to/bikkisingh/10-php-bugs-that-break-real-projects-and-how-to-fix-them-part-2-7hm