Apache загружает файлы php вместо того, чтобы отображать их
ОС и информация о сервере:
- CentOS 6.4 (Финал)
- Apache 2.2.15
- PHP 5.5.1
Ранее у меня был установлен php 5.3.x, но я решил обновить его. Сначала я удалил php 5.3.x, а затем установил php 5.5.1, но после завершения установки apache не анализировал файлы php, он просто загрузил их. Я проверил подобные вопросы здесь в stackru, но ни один из них мне пока не помог.
Для записи у меня есть следующие строки в моих httpd.conf и php.conf, которые должны заставить php работать, но не:
AddHandler application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
AddType application/x-httpd-php-source .phps
AddHandler php5-script .php
Я был бы очень признателен за любую помощь. Спасибо.
РЕДАКТИРОВАТЬ:
У меня есть эти строки в php.conf
<IfModule !worker.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
LoadModule php5_module modules/libphp5-zts.so
</IfModule>
РЕДАКТИРОВАТЬ:
Удалив
AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml
apache больше не загружает файл. Теперь Apache показывает исходный код, но не все это только часть. я добавил
AddType text/html .php
но не повезло.
27 ответов
Правильный AddType для php это application/x-httpd-php
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Также убедитесь, что ваш модуль PHP загружен
LoadModule php5_module modules/mod_php55.so
Когда вы настраиваете апач попытайтесь просмотреть страницу из другого браузера - У меня были дни, когда хром упорно кэширует результат и сохраняет загрузку исходного кода в то время как в другом браузере, это просто прекрасно.
Я столкнулся с этой проблемой сегодня, и ни одно из описанных решений не помогло мне. Итак, вот еще одна возможная причина:
Если у вас есть что-то вроде
AddHandler x-mapp-php6 .php3 .php4 .php .phtml
в .htaccess
файл папки вашего веб-контента, это может привести к тому, что ваши PHP-скрипты перестанут работать. В моем случае сервер не знал x-mapp-php6
типа, так как .htaccess
файл был что-то, что я импортировал с другого веб-хоста, когда я перенес содержание сайта.
Просто удаляя AddHandler
линия от .htaccess
файл решил это для меня.
После многих усилий я наконец решил проблему.
Если вам будет предложено загрузить .php
файл вместо того, чтобы выполнить его, тогда вот идеальное решение: я предполагаю, что вы уже установили PHP5 и все еще получаете эту ошибку.
$ sudo su
$ a2enmod php5
Это оно.
Но если вы все еще получаете ошибку:
Config file php5.conf not properly enabled: /etc/apache2/mods-enabled/php5.conf is a real file, not touching it
затем сделайте следующее:
Оказывается, файлы не должны храниться в mods-enabled
, но лучше хранить в mods-available
, Затем должна быть создана символическая ссылка с включенной модой, указывающая на файл, сохраненный в доступной моде.
Сначала удалите оригинал:
$ mv /etc/apache2/mods-enabled/php5.conf /etc/apache2/mods-available/
Затем создайте символическую ссылку:
$ ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf
Я надеюсь, что ваша проблема решена.
Если у вашего.htaccess есть что-то подобное... AddHandler application / x-httpd-php53.php.php5.php4.php3, прокомментируйте это и попробуйте еще раз обновить это для меня...
Пожалуйста, взгляните на ваши директивы addtype.
Мне кажется, что Apache сообщает браузеру, что отправляет документ типа приложения /php для сценариев с такими расширениями, как.php5. На самом деле Apache должен сообщить браузеру, что скрипт выводит text/html.
Пожалуйста, попробуйте это:
AddType text/html .php
Что касается вышеизложенного предложения о том, что вы должны сообщить браузеру, что вы выводите PHP-скрипт: мне это показалось необычной идеей. Я гуглил это и обнаружил, что в Интернете довольно много дискуссий по этому поводу. Очевидно, есть случаи, когда вы можете сказать, что отправляете сценарий PHP (даже если Apache должен выполнять сценарий и генерировать text / html), а также есть случаи, когда браузер просто не распознает этот конкретный Mime. Тип.
Очистка кеша браузера - это всегда хорошая идея.
В случае, если это полезно, вот копия моего файла /etc/httpd/conf.d/php.conf с сервера, на котором работает CentOS 5.9:
#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
LoadModule php5_module modules/libphp5-zts.so
</IfModule>
#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php
#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps
Это может происходить из-за отсутствия модулей, необходимых для вашего php. Предполагая, что у вас установлен php7, выполните поиск доступных модулей php7, используя
sudo apt-cache search php7-*
Выше команда перечислит все доступные модули PHP7 для установки. Вы можете начать установку модулей, как,
sudo apt-get install libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json
После обновления PHP до версии 7.3 скрипты PHP запускаются с www-данными вместо $USER, как раньше.
Мне нужно было переустановить и активировать PHP-FPM:
sudo apt-get install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo service apache2 restart
sudo a2enconf php7.3-fpm
sudo service apache2 restart
Чтобы убедиться, что с Virtualmin все в порядке, я использовал мастер повторной проверки конфигурации./virtual-server/check.cgi
в Vitualmin/Системные настройки.
После этого Apache/PHP загружал файлы php вместо их запуска. Так что мне нужно было отредактировать/etc/apache2/mods-available/php7.3.conf
прокомментировать строку SetHandler application/x-httpd-php
как показано ниже:
<FilesMatch ".+\.ph(ar|p|tml)$">
# SetHandler application/x-httpd-php
</FilesMatch>
После перезапуска Apache моя проблема была решена, надеюсь, это поможет.
Позаботьтесь и о кеше браузера.
Моя система:
Ubuntu 16.04.6 LTS
Webmin version 1.932
Usermin version 1.780
Virtualmin version 6.08
Apache version 2.4.41
PHP versions 7.3.12
PHP-FPM 7.3.12 Server
У меня та же проблема. Apache не загружает php файлы с определенного сайта, просто скачал его. Я прочитал этот пост и ответы, и я увидел, что я получил эту строку в последнем месте файла.htaccess:
AddHandler x-mapp-php5.5 .php
Я прокомментировал это, и все работает отлично.
Спасибо всем!!!
У меня ранее была похожая проблема, после обновления с 5.3 до 5.4. Но мои настройки выглядят немного иначе, так как я использую Debian и использую fcgid для сервера страниц PHP, а не модуль apache/cgi PHP5. Поэтому после обновления он также установил php5_cgi, который вступил в конфликт с моей настройкой fcgid, и больше не выполнял файлы PHP.
Мне пришлось отключить модуль Apache и перезапустить Apache
a2dismod php5_cgi
/etc/init.d/apache2 restart
Когда модуль php5_cgi вышел из строя, fcgid снова смог обслуживать страницы PHP.
Хорошо... Я знаю, что на эти вопросы уже есть 1 000 000 ответов, но я потратил не менее 6 эффективных часов, чтобы выяснить это; и я гуглил это сотни раз и не нашел ни одного поста об этом. Так что я решил добавить решение моей проблемы здесь.
Вывод
Если бы я прокомментировал эти две строки в моих.conf-файлах в /etc/apache2/[[SERVER-NAME].conf
-файл:
php_admin_value engine Off
IPCComTimeout 31
Я понятия не имею, что они делают или как они туда попали, но это в каждом из моих .conf
-файлы. И если я удалю эти строки и убедитесь, что есть символическая ссылка в /etc/apache2/sites-enabled/
-папки, то он не загружает index.php - и все работает как надо.
Вся история
У меня установлен VirtualMin на Ubuntu 16.04 VPS. Я обновился до версии PHP7.2. Вскоре после этого я обновил Ubuntu-версию и выдал ошибку "Смещение ядра: отключено". Поэтому мне пришлось удалить последнюю версию Ubuntu, и когда моя ОС снова загрузилась: BOOM! Я получил ошибку, о которой говорится в его сообщении: для каждого сайта на моем VPS он просто загружал index.php вместо того, чтобы показывать его.
Я перепробовал все виды вещей:
- Удален PHP7.2 и установлен PHP5.6 (теперь я знаю, что PHP-версия не имеет к этому никакого отношения; это apache-конфигурация, которая требует работы).
- Пробовал включать и отключать модули apache, на существующей установке, но без удачи.
- Затем я полностью удалил apache и снова установил его, где-после проблема все еще была!
- Попробовал поиграть с настройкой Virutal Server в VirtualMin ( Webmin >> Серверы >> Apache Webserver).
- Проверял конфигурацию на одном Виртуальном сервере ( Virtualmin >> Системные настройки >> Перепроверить конфигурацию)... Этот шаг был довольно приятным, так как он говорил, какой модуль в Apache отсутствовал; где-после я мог бы включить его с
a2enmod [MODULE_NAME]
, И я нашел название модуля от Google. Мне нужно было активировать около 6-8 модулей, прежде чем я прошел этот этап проверки - и прошло несколько минут, прежде чем кэш-память закончилась - так что это был утомительный шаг. - И, наконец, я выяснил вышеупомянутое заключение - вместе с символическими ссылками - и затем заставил его работать. Я должен был пройти это для каждого сайта на моем VPS, все же.
Если кто-то использует php7 в среде Linux
Убедитесь, что вы включили php7
sudo a2enmod php7
Перезапустите службу MySQL и Apache
sudo systemctl restart mysql
sudo systemctl restart apache2
У меня были похожие симптомы, но было и другое решение: в /etc/apache2/mods-enabled/php5.conf был полезный совет в комментарии, за которым я следовал:
# To re-enable php in user directories comment the following lines # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it # prevents .htaccess files from disabling it.
Я провел два дня, отслеживая это, и обнаружил, что я помещаю свои PHP-скрипты в неправильный каталог.
На моей стандартной установке Ubuntu я помещал скрипты в /var/www
, Они должны были быть в /var/www/html
,
Я только начал работу с PHP, поэтому не знаю, связано ли мое решение с изменением версии, через которое вы прошли.
У меня была эта проблема, и если вы на самом деле никогда не играли с настройками конфигурации вашего сервера, то ваша проблема на 90% в вашем файле .htaccess
Вы либо модифицируете файл .htaccess ЛОКАЛЬНО, либо удаляете его (ЛОКАЛЬНО)
Это решило проблему для меня (у меня установлен php7):
sudo apt-get установить libapache2-mod-php7.0
перезапуск службы sudo apache2
Также возможно, что у вас запущен nginx, но ваш php настроен для работы с apache. Чтобы проверить, запустите service nginx status
а также service apache2 status
чтобы увидеть, что работает. Если nginx работает, а apache - нет, просто запустите sudo service nginx stop; sudo service apache2 start
и ваш сервер теперь будет обслуживать php файлы, как и ожидалось.
У меня была эта проблема. Оказалось, что у меня были и nginx, и apache, установленные и автоматически запускающиеся при загрузке. Проблема заключалась в том, что nginx сначала связывался с http-портом, что препятствовало запуску apache.
Если у вас есть virtualmin, попробуйте закомментировать эти строки в вашей конфигурации apache в /etc/apache2/sites-available
#RemoveHandler .php
#RemoveHandler .php7.0
#php_admin_value engine Off
Когда я обновился с PHP 7.2 до PHP 7.4, у меня также возникла такая же проблема. Работал следующим образом:-
В
[domain].conf file
, прокомментировал следующее:php_admin_value двигатель выключен
И добавил:
AddType application/x-httpd-php-source .phps
AddType text/html .php
Отключите мод 7.2 и включите 7.4 следующим образом:
a2dismod php7.2
a2enmod php7.4В
/etc/apache2/mods-enabled/php7.4.conf
файл, следующий комментарий:Приложение SetHandler / x-httpd-php
php_admin_flag Engine Off
Если ничего из вышеперечисленного не работает,
попробуйте закомментировать строчку
SetHandler ....
и перезапустите Apache, используя
/etc/init.d/httpd restart
Он должен работать!
У меня была такая же проблема после использования
zypper rm php*
чтобы удалить PHP и установить его снова с помощью
zypper in php7 php7-gd php7-gettext php7-mbstring php7-mysql php7-pear
Я решил это, включив модуль apache2 и перезапустив веб-сервер:
a2enmod php7 && service apache2 restart
У меня такая проблема. Вот как я это решаю. После установки Apache я установил PHP с помощью этой команды.
sudo apt-get install php libapache2-mod-php
он выполняется правильно, но я запрашиваю файл .php от Apache, он дает без выполнения сценария PHP.
Затем я проверяю, включен ли PHP.
$ cd /etc/apache2
$ ls -l mods-*/*php*
но это не показало никаких результатов. Я проверяю установленные пакеты PHP.
$ dpkg -l | grep php| awk '{print $2}' |tr "\n" " "
Различные типы версий PHP установлены на моем компьютере. Затем я удаляю несколько пакетов PHP из моего предыдущего списка, используя apt-get purge.
sudo apt-get purge libapache2-mod-php7.0 php7.0 php7.0-cli php7.0-common php7.0-json
Я переустанавливаю PHP
sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql
Убедитесь, что модуль PHP загружен
$ a2query -m php7.0
если не включен с:
$ sudo a2enmod php7.0
Перезапустите сервер Apache
$ sudo systemctl restart apache2
Наконец, я проверяю процесс PHP на Apache
создать пустой файл
sudo vim /var/www/html/info.php
Добавьте этот контент в info.php и сохраните.
<?php
phpinfo();
?>
Проверьте в браузере:
это показывает правильно. Я думаю, что это поможет любому.
Для людей, которые нашли этот пост от Google почти на 6 лет в будущем (и позже!), Вы можете столкнуться с этой проблемой с Apache 2 и PHP 7, также используя UserDir
модуль.
Другой возможной причиной этой проблемы может быть то, что вы пытаетесь запустить сценарий в "пользовательском каталоге" из UserDir
модуль. По умолчанию выполнение сценариев PHP в пользовательских каталогах отключено. Вы столкнетесь с этой проблемой, если скрипт находится вpublic_html
каталог в вашей домашней папке, и вы пытаетесь получить к нему доступ из http://localhost/~your_username
.
Чтобы исправить это, откройте /etc/apache2/mods-enabled/php7.2.conf
. Вы должны прокомментировать или удалить блок тегов внизу, который гласит
<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_flag engine Off
</Directory>
</IfModule>
У меня была похожая проблема с OP при обновлении php5 с более старой версии до 5.5.9, которая является версией, установленной с Mint 17.
Я запускаю настройку LAMP на компьютере в моей локальной сети, который я использую для предварительного просмотра изменений на веб-сайтах, прежде чем загружать эти изменения на реальный сервер. Так что я поддерживаю идеальное местное зеркало реального сайта.
После обновления файлы, которые отлично работают и отображаются на реальном сайте, не будут отображаться или будут отображаться только в формате html на локальном компьютере. PHP не был разобран. Команда phpinfo() сработала, поэтому я знал, что php работает иначе. В журнале не было ошибок. Просмотр исходного кода страницы показал мне фактический код PHP.
Я создал страницу test.php, которая содержала следующий код:
<?php
phpinfo();
?>
Это сработало. Потом я обнаружил, когда я изменился <?php
в <?
команда больше не работает. Все мои сайты php используют <?
вместо <?php
что не может быть идеальным, но это реальность. Я исправил проблему, перейдя в /etc/php5/apache2, выполнив поиск "short_open_tag" и изменив значение с Выкл на Вкл.
PHP56
vim /etc/httpd/conf/httpd.conf
LoadModule php5_module libexec/apache/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Были многочисленные попытки исправить мою проблему, понимая, что точно такое же поведение было каким-то образом исправлено путем очистки кеша моего браузера. Попробуй.
Если у Вашего.htaccess есть что-то подобное
AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm