#Что происходит и когда применима инструкция
Предупреждение PHP об устаревших конструкциях означает, что код использует механизм, помеченный к удалению в новой версии. E_DEPRECATED — это не то же самое, что синтаксическая ошибка; код иногда продолжает работать, но его необходимо проверить на совместимость до следующего обновления.
#Причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Устаревшая функция или возможность PHPУстаревшая функция или возможность PHP. В журнале указано Deprecated и конкретный символ/файл. | В журнале указано Deprecated и конкретный символ/файл. | Найти замену по документации версии. |
| Предупреждение из сторонней библиотекиПредупреждение из сторонней библиотеки. Путь относится к vendor/ или плагину. | Путь относится к vendor/ или плагину. | Обновить библиотеку совместимым релизом и проверить зависимости. |
| Сообщение ошибочно выводится посетителямСообщение ошибочно выводится посетителям. Вместо только журналирования включён display_errors. | Вместо только журналирования включён display_errors. | Отключить публичный вывод и сохранить логирование. |
#Подробная пошаговая инструкция
- Скопируйте точный текст предупрежденияОткройте журнал ошибок сайта и запишите первое сообщение Deprecated вместе с номером строки и версией PHP, не публикуя секреты. Важны название устаревшей конструкции и версия: в разных выпусках PHP набор предупреждений отличается.
- Выясните, предупреждение или остановка выполненияВ браузере F12 → «Сеть» проверьте статус HTTP. При 200 приложение может лишь печатать предупреждение в HTML, при 500 отдельно ищите Fatal error, TypeError или Uncaught. Не лечите фатальную ошибку отключением E_DEPRECATED.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаSSH, только CLI-диагностика; -l проверяет синтаксис одного указанного файла, но не фактическую совместимость всего сайта. Путь и бинарник замените.
php -v; php -l /var/www/example/public/index.php
- Определите владельца проблемного кодаЕсли предупреждение ссылается на ваш файл, найдите вызов и проверьте официальную документацию PHP о его замене. Если это пакет стороннего разработчика, проверьте заявленную поддержку вашей версии PHP; не правьте файлы vendor вручную без фиксации обновления через менеджер зависимостей.
- Исправьте в тестовом окружении и сохраните совместимостьСделайте копию файла и тестовую базу, перепишите устаревший вызов способом, поддерживаемым требуемыми версиями PHP. Проверьте разные входные значения, исключения, кодировку и возвращаемые типы; отсутствие предупреждения ещё не доказывает совпадение поведения.
- Если нужна временная мера, защитите посетителейУстановите display_errors=Off и log_errors=On для веб-окружения, но продолжайте фиксировать предупреждения в журнале. Изменение error_reporting ради сокрытия Deprecated допустимо лишь как временная мера с планом обновления: оно не делает код совместимым.
- SSH, только чтение настроек CLI, они могут отличаться от FPMLinux · Терминал (Bash)КомандаSSH, только чтение настроек CLI, они могут отличаться от FPM. Не используется для изменения отчётности на сайте.
php -r "echo PHP_VERSION, PHP_EOL; echo error_reporting(), PHP_EOL;"
- Проверьте обновление на реальных сценарияхНа тестовом домене пройдите авторизацию, сохранение данных, загрузку файла и один критичный путь приложения. После переноса исправления проверьте журнал и количество Deprecated за несколько минут; при регрессии верните копию и уточните замену.
- Если сообщение связано с PHP 8.4/8.5, проверьте изменения именно этого выпускаНе переписывайте код наугад по руководству старой версии. Дата появления предупреждения, набор аргументов и поведение функции могут отличаться; сверяйте документацию и журнал соответствующей ветки PHP.
#Как проверить, что проблема исправлена
Предупреждение исчезло после исправления, критические сценарии приложения работают, журналирование включено без публичной демонстрации служебных сообщений.
#Если не помогло — дальнейшая диагностика и откат
Если после исправления Deprecated появились TypeError или новые Fatal error, откатите отдельный патч и проверьте подписи функций и поддержку библиотек. Нельзя автоматически заменять несовместимую функцию строковым поиском во всех PHP-файлах.