#Когда возникает проблема и как её отличить
Ответ HTTP 500 после переключения на PHP 8 означает внутреннюю ошибку обработки запроса, но по одному статусу нельзя понять её причину. Требуется сопоставить время запроса с журналами веб-сервера и PHP-FPM и проверить версию, синтаксис и зависимости.
#Возможные причины и диагностические признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Синтаксическая или фатальная ошибкаКод несовместим с версией либо отсутствует обязательная функция/класс. | В PHP-журнале Parse error, Fatal error или Uncaught Error | Исправить исходный файл по сообщению. |
| Ошибка доступности PHP-FPMВеб-сервер не может передать запрос нужному обработчику. | В журнале Nginx upstream или connect() failed | Проверить состояние конкретного пула и его сокета. |
| Недоступны файлы или подключение базыПроблема в правах, каталоге проекта, конфигурации подключения или зависимости. | Ошибка появляется лишь для одной страницы или после переноса | Сверить журнал приложения с изменениями окружения. |
#Пошаговая диагностика и исправление
- Зафиксируйте запрос и время ошибкиОткройте проблемную страницу в браузере и запишите полный путь без секретных параметров, время и статус в Network/«Сеть» инструментов разработчика (обычно F12). Повторяйте запрос один раз на тестовом сайте, чтобы найти его в журналах. Если сайт обслуживает пользователей, не устраивайте многократную нагрузку на живом сервере.
- Откройте PHP-журнал сайта и журнал веб-сервераВ панели хостинга найдите раздел журналов. Для собственного сервера выясните из конфигурации конкретные файлы логов Nginx/Apache и PHP-FPM: пути отличаются у дистрибутивов и панелей. По времени отыщите запись с вашим запросом. Не делайте вывод по старым ошибкам без привязки ко времени.
- Отделите ошибку PHP-кода от недоступного обработчикаЕсли PHP-журнал содержит
Uncaught TypeError,Parse errorили отсутствие класса, откройте указанный файл и строку на тестовой копии. Если веб-сервер сообщаетconnect() failed/upstream, сначала проверьте выбранный обработчик, сокет и состояние процесса: бессмысленно переписывать PHP-код, когда запрос даже не дошёл до него. - Сравните версию PHP сайта с консольнойВ панели домена проверьте активную версию PHP 8 и способ работы. В терминале выполните
php -v, но учтите, что CLI может запускать другой PHP. На PHP-FPM проверьте расширения и настройки именно пула сайта, особенно модули баз данных и Composer; временную страницу phpinfo держите только закрытой и после проверки удалите. - Выполните адресную проверку синтаксисаЕсли журнал указывает на PHP-файл, запустите
php -l path/to/file.phpпод той же версией, что обслуживает сайт, по возможности на тестовой копии. СообщениеNo syntax errors detectedне отменяет ошибку времени выполнения; следующими проверяйте класс, функцию и данные, указанные в PHP-журнале. - Исправьте одну подтверждённую причину и повторите запросПосле сохранения резервной копии измените только файл/параметр, связанный с записью журнала. При необходимости перезапуска PHP-FPM поручите это администратору с учётом других сайтов на том же пуле. Откройте страницу и проверьте HTTP-статус, содержимое ответа и новые записи логов. Если статус 500 остался, сравните новую ошибку со старой.
- Дополнительная команда по темеLinux · Терминал (Bash)КомандаТерминал тестового сервера, обычный пользователь; при нескольких версиях PHP используйте путь к нужному интерпретатору. Команды ничего не меняют.
php -vphp -l path/to/file.php
#Как проверить, что проблема устранена
Проверка считается успешной, когда проблемный URL возвращает ожидаемый HTTP-статус и корректную страницу либо штатную обработанную ошибку, а в журнале не появляется повторное фатальное сообщение.
#Если ошибка осталась
Повторите исходный сценарий в тестовой среде, откройте свежую запись журнала с точным временем, именем функции, файлом и строкой. Сравните новое сообщение с исходным: ошибка могла переместиться на следующий участок кода. Не подавляйте все ошибки общим обработчиком. Если изменения затрагивали работающий проект, восстановите сохранённую копию и разберите новое сообщение до повторного переноса.