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

78

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

  • CentOS 6.4 (Final)
  • 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

Я бы очень признателен за любую помощь. Спасибо.

EDIT:

У меня есть эти строки в php.conf

<IfModule !worker.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

EDIT:

Удалив

AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml

apache больше не загружает файл. Теперь apache показывает исходный код, но не все это просто часть. Я добавил

AddType text/html .php

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

  • 0
    Ну как ты его установил? Какой SAPI? Смотрите также Как проверить, какие модули apache включены / установлены?
  • 2
    Ваш php модуль не работает.
Показать ещё 9 комментариев
Теги:
centos

22 ответа

71
Лучший ответ

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

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

  • 0
    в моем случае нет пути к модулям
  • 0
    Не могли бы вы добавить информацию, где разместить эти строки?
Показать ещё 1 комментарий
15

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

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

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

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

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

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

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

  • 0
    Отлично. В моем случае это было AddHandler application/x-httpd-php54 .php54 .php которое нужно было удалить.
  • 0
    У меня возникла некоторая проблема, но я обнаружил виновный файл .htaccess в домашнем каталоге (один каталог над веб-каталогом public_html). Если у кого-то еще есть такая же проблема, ищите .htaccess также в родительских каталогах (каскад настроек).
Показать ещё 2 комментария
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
5

Пожалуйста, взгляните на свои директивы addtype.

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

Пожалуйста, попробуйте следующее:

AddType text/html .php

Что касается вышеизложенного предложения, вы должны сообщить браузеру, что вы выводите PHP script: для меня это казалось необычной идеей. Я искал ее и обнаружил, что в Интернете довольно много обсуждений. По-видимому, есть случаи, когда вы можете сказать, что вы отправляете PHP скрипт (хотя Apache должен выполнять script и испускать текст /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
  • 0
    Это интересно, но в моем случае он просто выводит весь PHP-скрипт, на этот раз отформатированный как HTML (в отличие от только с ASCII) - бесполезно! Проблема здесь в том, что PHP как-то работает неправильно или отправляются неправильные заголовки ...
  • 0
    Обратите внимание, что последняя директива AddType (которая закомментирована в вышеприведенном примере) заставляет файл .phps красиво печататься в HTML. Возможно ли, что ваша конфигурация Apache довольно печатает .php файлы?
3

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

AddHandler x-mapp-php5.5  .php

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

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

2

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

  • 0
    через четыре года у меня это работает !! :-П
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.

  • 0
    Aww да, этот хитрый cgi ублюдок ^^ Решил мою проблему после обновления php с 5.3 до 5.4 тоже из dotdeb.
1

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

1

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

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

sudo a2enmod php7

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

sudo systemctl restart mysql
sudo systemctl restart apache2
1

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

1

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

sudo apt-get install libapache2-mod-php7.0

sudo service apache2 restart

1

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

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

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

1

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

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

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

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

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

0

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

Вывод

Если я прокомментировал эти две строки в моем.conf -file s в /etc/apache2/[[SERVER-NAME].conf -file:

php_admin_value engine Off
IPCComTimeout 31

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

Вся история

У меня VirtualMin установлен на Ubuntu 16.04 VPS. Я обновился до версии PHP 7.2. Вскоре после этого я обновил версию Ubuntu и ударил "Смещение ядра: отключено" -error. Поэтому мне пришлось удалить последнюю версию Ubuntu, и когда моя ОС снова загрузится: BOOM! Я получил ошибку, о которой говорит его пост: для каждого сайта на моем 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]. И я нашел имя модуля Googling. Мне пришлось активировать около 6-8 модулей, прежде чем я прошел этот этап проверки - и прошло всего пару минут до того, как кеш закончился, - так что это был утомительный шаг.
  • И, наконец, я понял вышеприведенное заключение - вместе с символическими ссылками, - и затем я получил его на работу. Я должен был пройти через это для каждого сайта на моем VPS.
0

У меня возникла такая проблема. Вот как я его решаю. После установки Apache я установил PHP с помощью этой команды.

sudo apt-get install php libapache2-mod-php

он выполняется правильно, но я запрашиваю файл .php из Apache, он дает без выполнения PHP script.

Затем я проверяю, что 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

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
0

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

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

SetHandler ....

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

/etc/init.d/httpd restart

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

0

У меня была аналогичная проблема с OP при обновлении php5 из более старой версии, до версии 5.5.9, которая является версией, установленной с Mint 17.

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

После обновления файлы, которые запускаются и отображаются отлично на самом сайте, не будут отображаться или будут отображаться только на html на локальном компьютере. PHP не анализировался. Команда phpinfo() работала, поэтому я знал, что php работает иначе. В журнале не было ошибок. Просмотр источника страницы показал мне фактический php-код.

Я создал страницу test.php, содержащую следующий код:

<?php phpinfo(); ?>

Это сработало. Затем я обнаружил, что когда я изменил <?php на <?, команда больше не работала. Все мои php-сайты используют <? вместо <?php, которые могут быть не идеальными, но это реальность. Я исправил проблему, перейдя в /etc/php 5/apache2, выполнив поиск "short_open_tag" и изменив значение с "Выкл." На "Вкл.".

-1

Если у вашего .htaccess есть что-то вроде этого

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm

Ещё вопросы

Сообщество Overcoder
Наверх
Меню