Исправление ошибки PHP 503 и отображения кода как текста
Устраните ошибки 503 и проблемы с отображением PHP‑кода как текста после миграции версии. Узнайте, как включить короткие теги, чтобы сайт работал корректно.
PHP 503 Service Unavailable Error и отображение кода как текста в браузере
У меня возникло необычное поведение на новом домене, работающем под PHP 7.4:
- Любая страница с расширением .php возвращает ошибку «503 Service Unavailable», независимо от содержимого и того, содержит ли она PHP‑код.
- Любая страница с расширением .html отображается корректно, за исключением…
- Любой PHP‑код на странице .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:
# Для Apache/mod_php
php -v
# Для PHP-FPM
systemctl status php7.4-fpm
Решение: Убедитесь, что PHP 7.4 правильно настроен в панели управления хостингом и что обработчик корректно привязан к вашему домену.
2. Включение коротких тегов
Если ваш сервер поддерживает короткие теги, включите их в файле php.ini:
short_open_tag = On
Альтернативное решение: Замените все короткие теги PHP на полные:
<!-- Вместо: -->
<?php echo '<p>hello</p>'; ?>
<!-- Используйте: -->
<?php echo '<p>hello</p>'; ?>
Настройка через .htaccess: Вы также можете включить короткие теги через конфигурацию Apache:
php_flag short_open_tag on
Как отмечено на Stack Overflow, «Если PHP работает как модуль Apache, вы также можете задать это в .htaccess: php_flag short_open_tag on»
3. Перезапуск компонентов веб‑сервера
Перезапуск сервера или отдельных компонентов часто решает проблемы 503 Service Unavailable подтверждено руководством Hostinger.
# Для 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
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 корректно загружены:
LoadModule php7_module modules/libphp7.4.so
Конфигурация Nginx
Для Nginx убедитесь, что конфигурация PHP‑FPM правильна:
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 во время миграции и проблем с настройкой коротких тегов.
Ключевые выводы:
- Сначала решайте ошибки 503 – проверяйте конфигурацию обработчика PHP и перезапускайте серверные компоненты.
- Исправляйте вывод кода – включайте
short_open_tagили заменяйте короткие теги на полные. - Предотвращайте будущие проблемы – используйте полные теги PHP и поддерживайте актуальную документацию конфигурации.
- Свяжитесь с провайдером – если требуется воссоздание конфигурации домена, они смогут корректно её восстановить.
Если эти шаги не решат проблему, ваш провайдер должен воссоздать конфигурацию PHP для вашего домена с нуля, чтобы устранить любые конфликтные изменения, возникшие при переходе с PHP 5.6 до 7.4.
Источники
- How to Fix the HTTP Error 503 Service Unavailable (6 Steps) - Kinsta
- Site does not work on PHP-FPM on Plesk: 503 service unavailable – Plesk
- How to fix the 503 Service Unavailable Error in six steps - Hostinger
- PHP tags - PHP Manual
- Why are my PHP files showing as plain text? - Stack Overflow
- 503 Service Unavailable due to wrong PHP configuration - PlotHost
- How to Enable Short Open Tag (short_open_tag) in PHP - TecAdmin