Apache загружает файлы php вместо того, чтобы отображать их


93

Информация об ОС и сервере:

  • 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, которые он только что загрузил. Я проверял похожие вопросы здесь, в stackoverflow, но пока ни один из них мне не помог.

Для записи у меня есть следующие строки в моих 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

но не повезло.


Ну как ты его установил? Какой SAPI? См. Также Как проверить, какие модули apache включены / установлены?
Марио

2
Ваш модуль php не запущен.
Sithu

1
проверьте, httpd.confпрокомментирован ли модуль php или нет
MaveRick

1
Я редактировал вопросы. Модули выходят, и они явно загружаются
Энтони Гейнор

Вы перезапускали apache после установки?
Ахмад

Ответы:


80

Правильный 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

Когда вы настраиваете апач попытайтесь просмотреть страницу из другого браузера - У меня были дни, когда хром упорно кэширует результат и сохраняет загрузку исходного кода в то время как в другом браузере, это просто прекрасно.


в моем случае нет пути к модулям
shamaseen

2
Не могли бы вы добавить информацию, куда поместить эти строки?
Sören

7
Для людей, ищущих, где поставить эти строки. /etc/httpd/conf/httpd.conf
Сирадж Алам

В моем случае на Apache-2.4.6 + PHP-7.3.13> LoadModule php7_module modules / libphp7.so
shaojun lyu

23

Сегодня я столкнулся с этой проблемой, и ни одно из описанных решений не помогло мне. Итак, вот еще одна возможная причина:

Если у вас есть что-то вроде

AddHandler x-mapp-php6 .php3 .php4 .php .phtml

в .htaccessфайле папки веб-содержимого это может привести к тому, что ваши сценарии PHP перестанут работать. В моем случае сервер не знал x-mapp-php6тип, поскольку этот .htaccessфайл был импортирован с другого веб-хоста при переносе содержимого веб-сайта.

Просто удаление AddHandlerстроки из .htaccessфайла решило это для меня.


Отлично. В моем случае его AddHandler application/x-httpd-php54 .php54 .phpпришлось удалить.
Old McStopher

У меня была некоторая проблема, но я обнаружил виновный файл .htaccess в домашнем каталоге (один каталог над веб-каталогом «public_html»). Если у кого-то еще есть такая же проблема, поищите .htaccess и в родительских каталогах (каскад настроек).
Wireblue

У меня был файл .htaccess, подобный этому, который я вытащил с сервера веб-хостинга. Это заставляло версию PHP, которая не была установлена ​​на моем локальном компьютере. Таким образом, виртуальный хост неправильно выполнял файл PHP.
BrightIntelDusk

Это почти наверняка проблема, если одни сайты работают, а другие - нет. Joomla .htaccess содержал AddHandler, а WordPress - нет.
Питер Вустер,

Это сработало для меня, просто удалил эту строку из моего файла public / .htaccess, и индекс был загружен.
PA-GW

16

После долгих усилий я наконец решил проблему.

Если вам будет предложено загрузить .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

Надеюсь, твоя проблема решена.


2
Обратите внимание, что это работает только под Linux (и особенно под Debian Linux).
Гвинет Ллевелин

6

Взгляните на свои директивы addtype.

Мне кажется, что Apache сообщает браузеру, что он отправляет тип документа application / php для сценариев с расширениями, такими как .php5. Фактически, Apache должен сообщить браузеру, что сценарий выводит текст / html.

Пожалуйста, попробуйте это:

AddType text/html .php

Что касается приведенного выше предложения о том, что вы должны сообщить браузеру, что вы выводите PHP-скрипт: мне это показалось необычной идеей. Я погуглил и обнаружил, что в сети довольно много дискуссий по этому поводу. По-видимому, есть случаи, когда вы можете сказать, что отправляете PHP-скрипт (даже если Apache должен выполнять скрипт и выдавать текст / 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, на этот раз в формате HTML (а не только в формате ASCII) - бесполезно! Проблема здесь в том, что PHP каким-то образом не запускается правильно или отправляются неправильные заголовки ...
Гвинет Ллевелин,

Обратите внимание, что последняя директива AddType (закомментированная в приведенном выше примере) заставляет файл .phps хорошо печататься в HTML. Возможно ли, что ваша конфигурация Apache хорошо печатает файлы .php?
Сэм Азер

5

Это могло произойти из-за отсутствия модулей, необходимых для вашего 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

4

Если у вашего .htaccess есть что-то вроде этого ... AddHandler application / x-httpd-php53 .php .php5 .php4 .php3, затем прокомментируйте его и попробуйте еще раз обновить, это сработало для меня ...


3

У меня такая же проблема. Apache не загружает файлы php с определенного веб-сайта, а просто загружает их. Я прочитал этот пост и ответы, и я увидел, что эта строка находится на последнем месте файла .htaccess:

AddHandler x-mapp-php5.5  .php

Я прокомментировал это, и все работает нормально.

Спасибо всем !!!


2

У меня раньше была аналогичная проблема после обновления с 5.3 до 5.4. Но моя установка выглядит немного иначе, поскольку я запускаю Debian и использую fcgid для сервера страниц PHP, а не модуль PHP5 apache / cgi. Поэтому после того, как я обновился, он также установил php5_cgi, который столкнулся с моей настройкой fcgid и больше не выполнял файлы PHP.

Мне пришлось отключить модуль Apache и перезапустить Apache

a2dismod php5_cgi
/etc/init.d/apache2 restart

Как только модуль php5_cgi был отключен, fcgid снова смог обслуживать страницы PHP.


Ах да, этот хитрый ублюдок cgi ^^ Моя проблема была решена после обновления php с 5.3 до 5.4 с dotdeb.
Emii Khaos

2

У меня были похожие симптомы, еще одно решение: в /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.

2

Если кто-то использует php7 в среде Linux

Убедитесь, что вы включили php7

sudo a2enmod php7

Перезапустите службу mysql и Apache

sudo systemctl restart mysql
sudo systemctl restart apache2

2

После обновления 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 / System Settings .

После этого 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

1

Я потратил два дня, отслеживая это, и обнаружил, что помещаю свои PHP-скрипты не в тот каталог.

В моей стандартной установке Ubuntu я помещал скрипты в /var/www . Они должны были быть внутри /var/www/html.

Я только начал работу с PHP, поэтому не знаю, связано ли мое решение с изменением версии, через которое вы прошли.


1

это решило проблему для меня (у меня установлен php7):

sudo apt-get установить libapache2-mod-php7.0

sudo service apache2 перезапуск


1

У меня была такая проблема. Оказалось, что у меня были установлены и nginx, и apache, и они автоматически запускались при загрузке. Проблема заключалась в том, что nginx сначала привязывался к порту http, что препятствовало запуску apache.


1

Также возможно, что у вас запущен nginx, но ваш php настроен для работы с apache. Чтобы проверить, запустите service nginx statusи service apache2 statusпосмотрите, какой из них работает. В случае, если nginx запущен, а apache нет, просто запустите, sudo service nginx stop; sudo service apache2 startи ваш сервер теперь будет обслуживать файлы php, как ожидалось.


1

Хорошо ... Я знаю, что на этот вопрос уже есть 1.000.000 ответов, - но я потратил не менее 6 эффективных часов на то, чтобы выяснить этот вопрос; и я гуглил сотни раз и не нашел ни одного сообщения об этом. Поэтому я решил, что добавлю здесь решение своей проблемы.

Вывод

Если бы я закомментировал эти две строки в своих .conf-файлах в /etc/apache2/[[SERVER-NAME].conf-file:

php_admin_value engine Off
IPCComTimeout 31

Я понятия не имею, что они делают и как они туда попали, но это есть в каждом из моих .confфайлов. И если я удалю эти строки и обеспечу наличие символической ссылки в/etc/apache2/sites-enabled/ папке , тогда он не загрузит index.php - и все будет работать так, как должно.

Вся история

У меня VirtualMin установлен на Ubuntu 16.04 VPS. Я обновился до версии PHP 7.2. Вскоре после этого я обновил версию Ubuntu и обнаружил ошибку «Смещение ядра: отключено». Поэтому мне пришлось удалить последнюю версию Ubuntu, и когда моя ОС снова загрузилась: БУМ! Я получил ошибку, о которой говорится в его сообщении: для каждого сайта на моем VPS он просто загружал index.php вместо того, чтобы показывать его.

Я перепробовал все:

  • Удален PHP7.2 и установлен PHP5.6 (теперь я знаю, что версия PHP не имеет к этому никакого отношения; нужно доработать конфигурацию apache).
  • Пробовал включать и отключать модули apache в существующей установке, но безуспешно.
  • Затем я полностью удалил apache и снова установил его, после чего проблема все еще оставалась существовала!
  • Пытался поиграть с настройкой Virutal Server в VirtualMin (Webmin >> Servers >> Apache Webserver).
  • Проверил конфигурацию на одном виртуальном сервере (Virtualmin >> System Settings >> Re-Check Configuration) ... Этот шаг был довольно приятным, так как он сказал, какой модуль в Apache отсутствует; где-после я мог бы включить его с помощьюa2enmod [MODULE_NAME] . И я нашел имя модуля в Google. Мне пришлось активировать около 6-8 модулей, прежде чем я прошел этот этап проверки - а потребовалось несколько минут до того, как закончился кеш, - так что это было утомительным шагом.
  • И, наконец, я придумал вышеизложенный вывод - вместе с символическими ссылками - и затем заставил его работать. Однако мне пришлось пройти через это для каждого сайта на моем VPS.

1

У меня была эта проблема, и если вы на самом деле никогда не играли с настройками конфигурации вашего сервера, то ваша проблема на 90% в вашем файле .htaccess

Вы либо изменяете файл .htaccess ЛОКАЛЬНО, либо удаляете его (ЛОКАЛЬНО)


0

У меня была проблема, аналогичная 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» и изменив значение с Off на On.


0

Если ничего из вышеперечисленного не работает,

попробуйте закомментировать строку

SetHandler ....

и перезапустите apache, используя

/etc/init.d/httpd restart

Он должен работать!



0

У меня такая проблема. Вот как я это решаю. После установки 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

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


0

Если у вас есть virtualmin, попробуйте закомментировать эти строки в конфигурации apache в / etc / apache2 / sites-available

  #RemoveHandler .php
  #RemoveHandler .php7.0
  #php_admin_value engine Off

0

Когда я обновился с PHP 7.2 до PHP 7.4, у меня также возникла такая же проблема. Работал следующим образом: -

  1. In [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


0

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

0

У меня была такая же проблема после использования zypper rm php*для удаления PHP и его повторной установки с помощьюzypper in php7 php7-gd php7-gettext php7-mbstring php7-mysql php7-pear

Я решил это, включив модуль apache2 и перезапустив веб-сервер:

a2enmod php7 && service apache2 restart

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.