Manuals
RU EN

Старт · 63

Ошибка 500 после установки скрипта

Старт 5 мин чтения

HTTP 500 значит: сервер споткнулся, браузеру деталей не дали. Белый экран при 200 часто тот же Fatal Error с выключенным display_errors. Гадать по фасаду бессмысленно — нужен лог.

После свежей установки тройка лидеров: неверная версия PHP, конфликт .htaccess, ошибка подключения к MySQL. Дальше — права и лимиты памяти.

Где смотреть лог

  • Shared: раздел «ошибки», logs/ в домашнем каталоге, иногда error_log в корне сайта.
  • Apache: /var/log/apache2/error.log или лог виртуального хоста.
  • Nginx + PHP-FPM: error.log nginx и лог пула FPM (путь в pool.d).
  • Локально MicroServer — лог Apache/PHP из панели/каталога логов сервера.

Ищите timestamp вашего запроса. Одна строка Fatal Error экономит час тыканья в админку.

Версия PHP и синтаксис

Скрипт под 8.x, на домене 7.4 — типичный Parse error / unexpected token. В панели переключите PHP на 8.1+. Требования: PHP и MySQL.

Не хватает расширения — Call to undefined function mysqli_connect() и подобные. Доставьте mysqli/mbstring/gd, не перезаливайте архив.

.htaccess и Nginx

На Apache кривой .htaccess даёт 500 сразу на всех URL. Частые причины: неизвестные директивы, php_value на CGI/FPM (запрещено), битый rewrite.

На Nginx .htaccess игнорируется. Правила ЧПУ нужно перенести в конфиг. Если после переноса с Apache на Nginx всё 404/500 — смотрите vhost, не PHP: Nginx + PHP-FPM.

Быстрый тест: временно переименовать .htaccess и открыть главную. Если заработало (пусть без ЧПУ) — копайте rewrite.

База данных

Access denied и connection refused при display_errors=Off выглядят как 500. В логе будет SQLSTATE 1045/2002. Чеклист: ошибка подключения. После переноса конфиг со старыми паролями — классика.

Права и запись

Не может создать файл сессии/кэша — Fatal или Warning с permission denied. Каталоги upload/cache writable, владелец совпадает с пулом PHP: chmod.

Память и лимиты

Allowed memory size exhausted — поднимите memory_limit для домена. Maximum execution time — на тяжёлом импорте. Большой upload режет upload_max_filesize / post_max_size или client_max_body_size в Nginx — иногда с иной ошибкой, не обязательно 500.

Как временно увидеть ошибку

На боевом лучше лог. На стенде можно:

ini_set('display_errors', '1');
error_reporting(E_ALL);

или в php.ini / панели. Не оставляйте display_errors=On на проде с реальными пользователями — светите пути и SQL.

Если после переноса белый экран. 90% случаев: конфиг БД, путь к автозагрузке, другой document root (сайт смотрит в пустую папку), PHP ниже нужного. Не начинайте с «полной переустановки», пока нет строки из error_log.

Чеклист по порядку

  1. Открыть error_log по времени запроса.
  2. Сверить PHP 8.x и модули.
  3. Проверить коннект к MySQL теми же данными, что в конфиге.
  4. Проверить .htaccess / конфиг Nginx.
  5. Права на cache/upload.
  6. memory_limit.

Установка с нуля: установка. Перенос: перенос. Хостинг не тянет модули — выбор хостинга или VDS. В поддержку — текст из лога без паролей: поддержка.

Белый экран без кода 500

Иногда статус 200, body пустой. Для пользователя это то же самое. Причины те же Fatal Error / Parse Error. Включите лог, не гадайте. На shared положите временно ini_set в индекс только если нет доступа к логам — и уберите сразу после.

Пустой ответ ещё бывает при выводе до заголовков и сломанном gzip на уровне панели — реже. Сначала ищите PHP Fatal.

Конфликт модулей и ionCube

Если продукт или плагин требует ionCube/Zend Loader, а лоадера нет — будет 500 с понятной строкой в логе. Не путайте с «просто PHP 8». Документация комплекта скажет, нужен ли лоадер. Большинство наших чистых PHP-скриптов живут без него — но клиентский зоопарк плагинов бывает разный.

open_basedir и пути

На shared open_basedir режет доступ вне домашних каталогов. После переноса, если в конфиге остались абсолютные пути со старого сервера вида /home/u123/old, получите ошибки открытия файлов и 500. Обновите пути или перейдите на относительные, как заложено в продукте.

Локально на MicroServer open_basedir обычно не мешает: локальный сервер.

Сессии

Не может создать файл сессии — Warning/Fatal и «то логинит, то нет». Каталог session.save_path должен существовать и быть writable для пользователя PHP. На некоторых панелях после смены версии PHP путь сессий съезжает. Права в целом: chmod.

Как отличить проблему Nginx от PHP

  • Ответ 502/504 и строка connect() failed в nginx — FPM, не скрипт.
  • Ответ 500 и stack trace PHP в логе FPM — скрипт/модули/код.
  • Ответ 404 на всех ЧПУ при живом index.php — rewrite.

Про FPM: Nginx + PHP-FPM. Про базу, которая маскируется под 500: MySQL.

После обновления PHP в панели

Сменили 8.1 → 8.3 одной кнопкой — перезапустите FPM/веб, проверьте cron-путь к новому php. Часть модулей могла не включиться в новой версии (gd «пропал»). Сверьте php -m и требования: требования.

Если 500 начался сразу после обновления файлов продукта — откатите из бэкапа и сравните diff: бэкап, порядок обновления — поддержка и обновления.

Минимальный набор для тикета

URL, время запроса (с часовым поясом), 5–20 строк лога вокруг ошибки, версия PHP, что меняли последним. Этого хватает, чтобы не играть в двадцативопросье. SLA и ожидания по срокам: SLA.

Иногда 500 появляется только на POST (сохранение формы, загрузка фото), а GET главной живой. Тогда смотрите лимиты тела запроса, права на upload и ошибки в обработчике формы — не общий «сайт лежит». В логе будет строка именно на этот URI. Для картинок параллельно проверьте gd/imagick и лимиты php.ini из требований. На Nginx отдельно client_max_body_size: мануал. Если ошибка только после включения https — смешанный контент редко даёт 500, чаще редирект-петля; но кривой абсолютный путь в конфиге после смены URL встречается: SSL, перенос URL — перенос. Без строки лога в тикет лучше не писать: поддержка.

Частые вопросы

Ошибка 500 после установки php скрипта?

500 почти всегда в error_log: версия PHP, .htaccess или доступ к базе.

Сколько времени занимает «Ошибка 500 после установки скрипта»?

Ориентир по тексту мануала — около 5 мин. На практике зависит от хостинга и подготовки базы.

Нужен ли отдельный сервер?

Для большинства скриптов достаточно хостинга или VDS с PHP и MySQL. Подбор сервера — в разделе VDS и требованиях к PHP/MySQL.

Установка готового скрипта php mysql?

Разбор рядом в мануале по этому запросу. установка готового скрипта php mysql

Требования php mysql для скрипта?

Разбор рядом в мануале по этому запросу. требования php mysql для скрипта

Раздел
Установка PHP-скрипта

От требований к серверу до SSL и cron — все мануалы по запуску готового PHP-скрипта.