Вопрос или проблема
Мой Apache работает и отображает страницу по умолчанию. Я могу перенаправить файл PHP в php, и команда echo отображается правильно. Я уже исследовал предыдущие версии Ubuntu и не могу найти решение.
a2query -m php7.2 -> Включен скриптом обслуживания
В /etc/apache2/mods-available/php7.2.conf
Эти строки были закомментированы.
Выполнение PHP скриптов в пользовательских директориях отключено по умолчанию.
Чтобы снова включить PHP в пользовательских директориях, закомментируйте следующие строки
(от <IfModule ...> до </IfModule>.) НЕ устанавливайте значение On, так как
это предотвратит отключение его через файлы .htaccess.
Закомментированы следующие строки.
<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_flag engine Off
</Directory>
</IfModule>
Классический phpinfo.php обрабатывается, но Apache не предоставляет выходные данные. Т.е. php < phpinfo.php
перечисляет всю информацию.
Я считаю, что необходимо установить параметр и/или значение не установлено. Это произошло после обновления с Ubuntu 15.04 до Ubuntu 18.04. Любая помощь будет признательна.
В файле /etc/apache2/envvars пользователь и группа были неверными. изменено export APACHE_RUN_USER=www-data на имя_пользователя и изменено export APACHE_RUN_GROUP=www-data на имя_пользователя
Другие изменения были внесены в файл конфигурации apache, чтобы phpmyadmin заработал, но это уже другая история.
Я столкнулся с аналогичной проблемой, когда файлы php не выполнялись после обновления с Ubuntu 18.10 до 19.10 и php 7.3. Оказалось, что этот вопрос был моим ответом. Мой веб-корень находился в /home/xyz/public_html. Решением было закомментировать блок <IfModule mod_userdir.c> ... </IfModule>
.
Ответ или решение
Когда мы рассматриваем проблему, как в вашем случае, с тем, что PHP-скрипты не исполняются на сервере Apache, но сервер Apache корректно отображает страницу по умолчанию и может обрабатывать другой PHP-код через CLI, это указывает на несколько возможных причин. Давайте разберемся в этой проблеме более подробно.
Теория (Theory)
Apache и PHP работают совместно через определенные модули, чтобы интерпретировать и исполнять PHP-код. Основной модуль, ответственный за интеграцию PHP с Apache, — это mod_php
, который должен быть включен и правильно настрой:
- Правильная конфигурация модулей и директив Apache,
- Наличие правильных пакетов и их совместимость,
- Корректная настройка прав на файлы и папки, где размещены ваши веб-файлы.
В вашей ситуации некоторые характерные моменты могут указывать на неправильную конфигурацию, особенно после обновления системы, что может привести к конфликтам или изменениям в конфигурационных файлах. Переменные окружения также играют ключевую роль, так как они определяют, какие пользователи и группы будут использоваться Apache, что важно для доступа к файлам и папкам.
Пример (Example)
Вы указали, что в файле конфигурации /etc/apache2/mods-available/php7.2.conf
закомментированы строки, относящиеся к <IfModule mod_userdir.c>
. Это важный момент, поскольку этот модуль отвечает за разрешение исполнения скриптов в пользовательских директориях. Если ваши PHP-файлы находятся в директориях /home/*/public_html
, использование mod_userdir
необходимо для того, чтобы PHP-скрипты исполнялись корректно.
Вы также упомянули, что изменили переменные среды в файле /etc/apache2/envvars
с www-data
на ваше имя пользователя. Это может создать конфликт с файловой системой, так как Apache обычно работает под пользователем www-data
для целей безопасности и управления правами доступа.
Применение (Application)
Решение подобных проблем требует последовательного подхода к диагностике и устранению неполадок. Вот последовательность шагов, которые вы можете предпринять:
-
Проверка модулей Apache:
Убедитесь, что модуль PHP включен в Apache. Используйте командуa2enmod php7.2
и затем перезапустите Apache (sudo systemctl restart apache2
). -
Проверка конфигурации
mod_userdir
:
Обратите внимание на секцию<IfModule mod_userdir.c>
. Если ваши PHP-файлы содержатся внутри домашних директорий, эта секция должна быть разблокирована. Закомментируйте строки, которые запрещают выполнение PHP в пользовательских директориях:#<IfModule mod_userdir.c> # <Directory /home/*/public_html> # php_admin_flag engine Off # </Directory> #</IfModule>
-
Правила доступа и права на файлы:
Проверьте права на доступ и владение файлами ваших PHP с использованиемls -la
в директории/home/*/public_html
. Убедитесь, что пользовательwww-data
, под которым работает Apache, имеет необходимые права на чтение и выполнение скриптов. -
Переменные окружения:
Верните изменения в/etc/apache2/envvars
наwww-data
, если это возможно. Это лучшая практика для обеспечения безопасности и правильного функционирования всей системы. -
Проверка ошибок Apache:
Ознакомьтесь с логами ошибок Apache (/var/log/apache2/error.log
) на предмет дополнительных подсказок о том, что может быть не так. -
Перепроверка конфигурации после обновления:
Обновление системы может вносить изменения в расположение и содержимое конфигурационных файлов. Проверьте, все ли ваши настройки мигрированы правильно, и обратите внимание на возможные изменения в дефолтной конфигурации, которые могли быть внедрены обновлением.
Следуя этим шагам, вы сможете диагностировать и, возможно, решить проблемы, которые приводят к тому, что PHP-скрипты не исполняются должным образом. Ваша ситуация сложная, требующая внимания к мельчайшим деталям конфигурации сервера и файловой системы. Удачи!