Белый экран после смены версии PHP: с чего начинать
Белый экран — это не особый вид поломки, а признак того, что выполнение остановилось, а текст ошибки никуда не вывелся. Вся задача сводится к тому, чтобы его добыть.
Порядок действий
- Журнал ошибок веб-сервера и PHP на сервере — чаще всего причина уже там, с именем файла и номером строки.
- Если в журнале пусто — поднимите копию сайта и включите на ней отладку: в файле
/bitrix/.settings.phpпараметрdebugпоставьте вtrue. - Повторите действие, на котором появляется белый экран, и прочитайте сообщение.
- Почините причину, проверьте на копии, перенесите на боевой сайт.
Отладочный режим включается только на копии: на боевом сайте он показывает посетителям пути к файлам и куски кода.
Частые причины после смены версии PHP
| Причина | Как проверить |
|---|---|
short_open_tag = Off | Требование вендора — On. Шаблоны используют короткую форму открывающего тега; при выключенном параметре страница либо пустая, либо показывает куски собственного кода |
| Нехватка памяти | Процесс падает молча. Смотрите журнал PHP: там будет сообщение про исчерпанную память |
| Недостающее расширение | Часть расширений ставится отдельно под каждую версию PHP. Покажет проверка системы в административной части |
| Фатальная ошибка несовместимости | Нестатический метод, $GLOBALS, удалённые функции — разборы в отдельных инструкциях |
| Разные версии у веб-сервера и консоли | Сайт работает, а задания расписания падают — или наоборот |
Белый экран не только из-за PHP
- Права на файлы. После переноса сайта владелец часто меняется, и веб-сервер не может прочитать то, что ему нужно.
- Кончилось место на диске. База останавливается, и сайт отдаёт пустоту или ошибку подключения.
- Повреждённый файл. Прервавшееся обновление или копирование оставляет обрезанный файл; PHP не может его разобрать.
- Кеш байт-кода. После правки файлов сервер продолжает отдавать старую, уже несовместимую версию, пока его не перезапустили.
Если белый экран только на части страниц
Это сужает поиск до конкретного компонента или шаблона. Сравните, что общего у проблемных страниц: один и тот же компонент, один тип инфоблока, одна и та же подключаемая область. Дальше отладка на копии покажет точное место.
Быстрый выход
Если белый экран появился сразу после переключения версии PHP, верните прежнюю — сайт поднимется, и дальше можно разбираться спокойно на копии. Смена версии обратима, в отличие от большинства других действий, и пользоваться этим не стыдно.
Частые вопросы
Почему вместо ошибки пустая страница?
Вывод ошибок на боевом сайте выключен — и это правильно. Ошибка произошла, просто её текст не попал в браузер. Он почти всегда есть в журнале ошибок веб-сервера или PHP.
Можно включить показ ошибок на боевом сайте на пару минут?
Лучше не надо: вместе с текстом посетителям покажутся пути к файлам и фрагменты кода, а этого достаточно, чтобы спланировать атаку. Поднимите копию и включайте отладку на ней.
В журнале пусто, а сайт белый.
Проверьте, что смотрите журнал нужного сайта и за нужный период, и загляните в журнал PHP-FPM отдельно от журнала веб-сервера. Если и там пусто — скорее всего процесс падает по нехватке памяти.
Сайт показывает куски собственного кода вместо страницы.
Характерный признак выключенного short_open_tag: PHP не обрабатывает короткую форму открывающего тега, которую используют шаблоны. Требование вендора — включить его.
Белый экран только на некоторых страницах.
Ищите общее: один компонент, один тип инфоблока, одна подключаемая область. Это сужает поиск до конкретного места, и дальше отладка на копии покажет точную строку.
Поправил файл, а ошибка та же.
Возможно, сервер отдаёт старую версию из кеша байт-кода. Перезапустите PHP-FPM или веб-сервер и проверьте снова.