Другое

Исправление ошибки PHP 503 и отображения кода как текста

Устраните ошибки 503 и проблемы с отображением PHP‑кода как текста после миграции версии. Узнайте, как включить короткие теги, чтобы сайт работал корректно.

PHP 503 Service Unavailable Error и отображение кода как текста в браузере

У меня возникло необычное поведение на новом домене, работающем под PHP 7.4:

  1. Любая страница с расширением .php возвращает ошибку «503 Service Unavailable», независимо от содержимого и того, содержит ли она PHP‑код.
  2. Любая страница с расширением .html отображается корректно, за исключением…
  3. Любой PHP‑код на странице .html работает только в первых нескольких символах, а затем выводится в браузере как обычный текст.

Пример кода файла .html:

html
<html>
  <head>
  </head>
  <body>
    <?php echo '<p>hello</p>'; ?>
  </body>
</html>

Правильный вывод должен быть «hello».
Фактический вывод: «hello’; ?>».

При создании домена у хостинг‑провайдера возникли проблемы: изначально была установлена PHP 5.6, а затем её сменили на PHP 7.4. Может ли остаться некорректная ссылка на старую версию PHP?

Мой хостинг‑провайдер, похоже, не справляется с решением этой проблемы. Обратите внимание, что <?php phpinfo(); ?>, который обычно помогает диагностировать проблемы с PHP, в этой среде не работает.

PHP‑ошибка 503 «Service Unavailable» в сочетании с выводом кода как текста обычно указывает на две взаимосвязанные проблемы: некорректная конфигурация обработчика PHP, вызывающая 503‑ошибки, и неверно настроенные короткие теги PHP, из‑за которых часть кода отображается как обычный текст. Первая миграция с PHP 5.6 до PHP 7.4, вероятно, оставила остаточные конфигурационные конфликтные изменения на сервере.


Содержание


Понимание типов ошибок

Ошибка 503 «Service Unavailable» означает, что «сервер временно не может обслужить ваш запрос из‑за технического обслуживания или проблем с пропускной способностью» согласно технической документации PlotHost. Когда она сочетается с выводом PHP‑кода как текста в HTML‑файлах, речь идёт о двух отдельных, но потенциально взаимосвязанных проблемах конфигурации сервера.

Характеристики ошибки 503:

  • Влияет на все файлы .php, независимо от их содержимого
  • Указывает на перегрузку сервера или неверную настройку обработчика PHP
  • Часто возникает при переходе на новую версию PHP
  • Может сохраняться даже после того, как сервер кажется работающим нормально

Характеристики вывода кода как текста:

  • Влияет только на встроенный PHP‑код в файлах .html
  • Частичный вывод указывает на проблемы с распознаванием парсера PHP
  • Связан с настройкой коротких тегов PHP
  • Часто встречается после обновления PHP, когда короткие теги могут быть отключены

Анализ причин

Некорректная настройка обработчика PHP

Наиболее вероятная причина 503‑ошибок – проблема с настройкой обработчика PHP, возникшая во время миграции с PHP 5.6 до 7.4. Согласно документации поддержки Plesk, «Если проблемы 503 продолжаются для некоторых сайтов, использующих конкретную версию PHP, файлы остаются повреждёнными, из‑за чего необходимо воссоздать их с нуля» из официальной поддержки Plesk.

Проблемы с короткими тегами PHP

Частичный вывод <?php echo '<p>hello</p>'; ?> как «hello’; ?>» является классической проблемой настройки коротких открывающих тегов. Как объясняется в официальной документации PHP, «Короткие теги (пример три) доступны по умолчанию, но могут быть отключены через директиву short_open_tag в php.ini или отключены по умолчанию, если PHP собран с параметром --disable-short-tags» из руководства PHP.net.

Ключевая проблема: Сервер может быть настроен на распознавание <?php, но не полностью обрабатывать структуру тегов, либо может возникать конфликт парсинга между разными обработчиками PHP.


Пошаговые решения по устранению неполадок

1. Проверка конфигурации обработчика PHP

Проверьте текущие настройки обработчика PHP:

bash
# Для Apache/mod_php
php -v
# Для PHP-FPM
systemctl status php7.4-fpm

Решение: Убедитесь, что PHP 7.4 правильно настроен в панели управления хостингом и что обработчик корректно привязан к вашему домену.

2. Включение коротких тегов

Если ваш сервер поддерживает короткие теги, включите их в файле php.ini:

short_open_tag = On

Альтернативное решение: Замените все короткие теги PHP на полные:

html
<!-- Вместо: -->
<?php echo '<p>hello</p>'; ?>

<!-- Используйте: -->
<?php echo '<p>hello</p>'; ?>

Настройка через .htaccess: Вы также можете включить короткие теги через конфигурацию Apache:

apache
php_flag short_open_tag on

Как отмечено на Stack Overflow, «Если PHP работает как модуль Apache, вы также можете задать это в .htaccess: php_flag short_open_tag on»

3. Перезапуск компонентов веб‑сервера

Перезапуск сервера или отдельных компонентов часто решает проблемы 503 Service Unavailable подтверждено руководством Hostinger.

bash
# Для Apache
sudo systemctl restart apache2
# Для Nginx
sudo systemctl restart nginx
# Для PHP-FPM
sudo systemctl restart php7.4-fpm

4. Проверка на повреждённые конфигурационные файлы

Миграция с PHP 5.6 до 7.4 могла оставить повреждённые конфигурационные файлы. Как указывает документация Plesk, «файлы остаются повреждёнными, из‑за чего необходимо воссоздать их с нуля» из поддержки Plesk.

Решение: Воссоздайте конфигурацию домена в панели управления хостингом или свяжитесь с провайдером для регенерации конфигурационных файлов.

5. Тестирование простым PHP‑файлом

Создайте минимальный тестовый файл, чтобы изолировать проблему:

php
<?php
phpinfo();
?>

Если при этом всё ещё возникает ошибка 503, проблема определённо в настройке обработчика PHP.


Профилактика и лучшие практики

1. Используйте полные теги PHP

Лучшее решение: Всегда используйте полные теги PHP (<?php ?>) вместо коротких (<? ?>) для избежания проблем совместимости на разных серверах.

Причина: «Короткие открывающие теги устарели в 7.4 и будут удалены в 8.0» как отмечено на Stack Overflow.

2. Регулярные обновления PHP

Обновляйте версии PHP и тестируйте изменения в тестовой среде до развертывания в продакшн.

3. Резервное копирование конфигурации сервера

Всегда делайте резервную копию конфигурации сервера перед крупными изменениями версии PHP.

4. Мониторинг ресурсов сервера

Ошибка 503 может также указывать на перегрузку сервера. Следите за ресурсами и рассматривайте возможность апгрейда, если вы постоянно достигаете предела пропускной способности.


Расширенные вопросы конфигурации

Конфигурация пулов PHP‑FPM

Если вы используете PHP‑FPM, проверьте конфигурацию пула на корректность настроек рабочих процессов:

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

Конфигурация модуля Apache

Для серверов Apache убедитесь, что модули PHP корректно загружены:

apache
LoadModule php7_module modules/libphp7.4.so

Конфигурация Nginx

Для Nginx убедитесь, что конфигурация PHP‑FPM правильна:

nginx
location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.4-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Заключение

Сочетание ошибок 503 и вывода PHP‑кода как текста обычно возникает из‑за некорректной настройки обработчика PHP во время миграции и проблем с настройкой коротких тегов.

Ключевые выводы:

  1. Сначала решайте ошибки 503 – проверяйте конфигурацию обработчика PHP и перезапускайте серверные компоненты.
  2. Исправляйте вывод кода – включайте short_open_tag или заменяйте короткие теги на полные.
  3. Предотвращайте будущие проблемы – используйте полные теги PHP и поддерживайте актуальную документацию конфигурации.
  4. Свяжитесь с провайдером – если требуется воссоздание конфигурации домена, они смогут корректно её восстановить.

Если эти шаги не решат проблему, ваш провайдер должен воссоздать конфигурацию PHP для вашего домена с нуля, чтобы устранить любые конфликтные изменения, возникшие при переходе с PHP 5.6 до 7.4.


Источники

  1. How to Fix the HTTP Error 503 Service Unavailable (6 Steps) - Kinsta
  2. Site does not work on PHP-FPM on Plesk: 503 service unavailable – Plesk
  3. How to fix the 503 Service Unavailable Error in six steps - Hostinger
  4. PHP tags - PHP Manual
  5. Why are my PHP files showing as plain text? - Stack Overflow
  6. 503 Service Unavailable due to wrong PHP configuration - PlotHost
  7. How to Enable Short Open Tag (short_open_tag) in PHP - TecAdmin
Авторы
Проверено модерацией
Модерация