PHP 8.5: Тихие убийцы багов или почему стоит обратить внимание на новую версию
Привет, коллеги!
Как PHP-разработчик, я изучил правки в тестовой версии PHP 8.5. И спешу поделиться открытием: среди скучных технических исправлений спрятаны настоящие «тихие убийцы» багов — изменения, которые предотвратят множество странных ошибок в вашем коде.
Безопасность почты: исправлен heap overflow в mail()
Что было: В функции mail() обнаружили уязвимость переполнения буфера при работе с пустыми сообщениями в режиме LF.
Почему это важно: Если вы отправляете почту через встроенную функцию mail(), ваш сервер мог быть уязвим. Это не теоретическая угроза — такие уязвимости часто используют для атак.
Что делать: После обновления до 8.5 можете спать спокойнее. Но в любом случае рекомендую использовать специализированные библиотеки вроде Symfony Mailer или PHPMailer.
Конец эпохи: __sleep() и __wakeup() помечены как устаревшие
Что было: Магические методы сериализации работали десятилетиями, но имели фундаментальные проблемы с надежностью.
Почему это важно:
Что делать: Пора переходить на __serialize() и __unserialize(). Пока это «мягкое» устаревание, но в PHP 9.0 эти методы могут исчезнуть.
Null больше не ключ массива
Что было: $array[null] молча преобразовывался в $array[''] или $array[0], создавая неочевидные баги.
Почему это важно:
Что делать: Проверить код на использование null как ключа массива. Чаще всего это ошибка логики.
FPM наконец-то правильно читает .user.ini
Что было: Директива post_max_size в .user.ini применялась слишком поздно, что могло обходить ограничения размера загружаемых файлов.
Почему это важно: Это касается безопасности! Если вы разрешаете пользователям настраивать свои сайты через .user.ini, теперь ограничения будут работать корректно.
NAN и непредставимые float теперь кричат о помощи
Что было: Приведение NAN к integer молча давало 0, скрывая серьезные математические ошибки.
Почему это важно:
Теперь вы сразу увидите, где в ваших расчетах появляются нечисловые значения.
Что еще в копилку?
- PDO методы-изгои: Драйвер-специфичные методы вроде PDO::pgsqlCopyToArray() помечены устаревшими
- Многобайтовый ord(): ord("Привет") теперь вызовет предупреждение
- Стабильность JIT: Десятки исправлений в Opcache делают JIT надежнее
Выводы
Многие изменения кажутся техническими, но на самом деле они предотвращают целые классы ошибок, которые мы годами ловили в проде.
Стоит ли обновляться? Однозначно да. Но подготовьтесь:
- Включите отображение deprecation warnings в development
- Протестируйте свой код на RC-версии PHP 8.5
- Особое внимание уделите коду, связанному с сериализацией и работой с массивами
Дополнительно о новых функциях и других изменениях можно прочитать здесь.