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, у меня также возникла такая же проблема. Работал следующим образом:-

  1. В [domain].conf file, прокомментировал следующее:

    php_admin_value двигатель выключен

И добавил:

AddType  application/x-httpd-php-source  .phps
AddType text/html .php
  1. Отключите мод 7.2 и включите 7.4 следующим образом:

    a2dismod php7.2
    a2enmod php7.4

  2. В /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();
?>

Проверьте в браузере:

http://localhost/info.php

это показывает правильно. Я думаю, что это поможет любому.

Для людей, которые нашли этот пост от 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
Другие вопросы по тегам