Почему вместо сайта отображается PHP-код и как это исправить
Иногда при открытии сайта вместо нормальной страницы в браузере отображается PHP-код: <?php ... ?>. Это серьезная проблема: сайт не работает, а часть внутренней логики может стать видна посетителям и поисковым роботам.
Почему PHP-код выводится в браузере
PHP-код должен выполняться на сервере. Пользователь не должен видеть исходный код PHP-файлов. Если браузер показывает PHP как обычный текст, значит сервер не обрабатывает PHP-файл, а отдает его как статический документ.
Чаще всего это происходит по одной из следующих причин:
- на сервере не установлен PHP;
- не запущен PHP-FPM;
- в Nginx или Apache неправильно настроена обработка PHP;
- файл имеет неправильное расширение;
- сайт открыт не через веб-сервер, а напрямую как файл;
- после переноса сайта не настроили виртуальный хост;
- в конфигурации сервера сломался блок обработки
.php.
Чем это опасно
Вывод PHP-кода в браузере — это не просто техническая ошибка. В PHP-файлах могут быть логины, пароли, токены API, настройки подключения к базе данных и внутренняя логика сайта.
Если такой код попадает в открытый доступ, злоумышленник может получить доступ к базе данных, панели управления, почте или сторонним сервисам.
Проверьте, установлен ли PHP
На сервере выполните команду:
php -v
Если PHP установлен, сервер покажет его версию. Например:
PHP 8.2.29 (cli)
Если команда не найдена, PHP нужно установить.
Проверьте PHP-FPM
Для сайтов на Nginx обычно используется PHP-FPM. Проверьте его статус:
systemctl status php8.2-fpm
Версия может отличаться: php8.1-fpm, php8.2-fpm, php8.3-fpm.
Если служба остановлена, запустите ее:
systemctl start php8.2-fpm
Чтобы PHP-FPM запускался автоматически после перезагрузки сервера:
systemctl enable php8.2-fpm В своих проектах я использую серверную инфраструктуру Timeweb
Хостинг, VPS и облачные решения для стабильной работы сайтов на PHP и 1С-Битрикс — от корпоративных сайтов до интернет-магазинов и высоконагруженных веб-проектов.
Перейти на TimewebПример правильной настройки Nginx для PHP
В конфигурации сайта должен быть блок, который передает PHP-файлы в PHP-FPM:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
Если используется другая версия PHP, путь к сокету нужно изменить. Например:
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
Проверить доступные сокеты можно командой:
ls /run/php/
Настройка Nginx для 1С-Битрикс
Для сайта на 1С-Битрикс важно, чтобы PHP-файлы корректно передавались в PHP-FPM, а остальные запросы шли через urlrewrite.php.
server {
listen 80;
server_name example.ru www.example.ru;
root /var/www/example.ru;
index index.php index.html;
location / {
try_files $uri $uri/ /bitrix/urlrewrite.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
}
После изменения конфигурации проверьте Nginx:
nginx -t
Если ошибок нет, перезагрузите сервер:
systemctl reload nginx
Проверьте расширение файла
PHP-код будет выполняться только в файлах с расширением .php. Если код находится в файле index.html, сервер не будет выполнять его как PHP.
Правильно:
index.php
Неправильно:
index.html
Проверьте короткие PHP-теги
Иногда проблема возникает из-за коротких PHP-тегов:
<?
echo "Текст";
?>
Лучше использовать полный вариант:
<?php
echo "Текст";
?>
Короткие теги могут быть отключены в настройках PHP, поэтому надежнее всегда писать <?php.
Если сайт открывается как файл
PHP не выполняется, если открыть файл напрямую в браузере:
file:///C:/site/index.php
В этом случае браузер просто показывает содержимое файла. PHP должен открываться через локальный или удаленный веб-сервер:
http://localhost/
https://example.ru/
Что делать, если PHP-код уже попал в браузер
Если PHP-код некоторое время был доступен публично, нужно не только исправить сервер, но и проверить безопасность проекта.
- проверьте, не были ли раскрыты пароли от базы данных;
- смените пароли, если они могли попасть в открытый доступ;
- проверьте логи сервера;
- убедитесь, что конфигурационные файлы недоступны извне;
- проверьте права на файлы и директории;
- закройте от прямого доступа служебные файлы и резервные копии.
Дополнительная защита конфигурационных файлов
На сервере не должно быть открытого доступа к резервным копиям, архивам, дампам базы данных и временным файлам.
Например, в Nginx можно закрыть доступ к опасным расширениям:
location ~* \.(sql|bak|backup|old|log|ini|env)$ {
deny all;
}
Это не заменяет правильную настройку PHP, но снижает риск утечки служебных данных.
Краткий чек-лист исправления
- Проверить, установлен ли PHP.
- Проверить, запущен ли PHP-FPM.
- Проверить конфигурацию Nginx или Apache.
- Убедиться, что файлы имеют расширение
.php. - Проверить путь к PHP-FPM сокету.
- Выполнить
nginx -t. - Перезагрузить Nginx.
- Проверить сайт в браузере.
- Если код был доступен публично — сменить пароли и проверить логи.
Вывод
Если при открытии сайта выводится PHP-код, значит сервер не выполняет PHP-файлы. В большинстве случаев проблема связана с неправильной настройкой Nginx, Apache или PHP-FPM.
Исправлять такую ошибку нужно сразу. Это влияет не только на работу сайта, но и на безопасность: в PHP-коде могут находиться доступы к базе данных, токены и другая служебная информация.
Не получается самостоятельно?
Поддержка сайтов на 1С-Битрикс
Резервирую время под ваш проект для оперативной помощи и стабильной работы сайта.
Комментарии