it-roy-ru.com

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, а просто скачал их. Я проверил подобные вопросы здесь в 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

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

79
Anthony Gainor

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

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

69
Mihkel

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

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

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

15
Ravi Shankar

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

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

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

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

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

14
markus

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

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

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

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

AddType text/html .php

Что касается предложения выше, что вы должны сообщить браузеру, что вы выводите скрипт PHP: мне это показалось необычной идеей. Я гуглил это и обнаружил, что в Интернете довольно много дискуссий по этому поводу. Очевидно, есть случаи, когда вы можете сказать, что отправляете скрипт PHP (даже если Apache должен выполнять скрипт и генерировать text/html), а также есть случаи, когда браузер просто не делает этого. признать, что конкретный тип пантомимы. 

Очистка кэша вашего браузера - это всегда хорошая идея.

В случае, если это полезно, вот копия моего файла /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
5
Sam Azer

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

4
user252566

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

AddHandler x-mapp-php5.5  .php

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

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

3
Ladislao Garcia

У меня ранее была похожая проблема, после обновления с 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. 

2
derchris

В случае, если кто-то использует php7 в среде Linux

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

Sudo a2enmod php7

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

Sudo systemctl restart mysql
Sudo systemctl restart Apache2
1
MedoAlmasry

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

1
hexicle

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

1
dshepherd

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

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

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

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

1
Craig Smilovitz

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

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

Судо сервис Apache2 перезагрузка

1
Marouen Mhiri

Хорошо ... Я знаю, что на эти вопросы уже есть 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. Я обновился до PHP версии 7.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, все же. 
0
Zeth

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

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

SetHandler ....

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

/etc/init.d/httpd restart

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

0
Cosmo Arun

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

У меня была похожая проблема с 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» и изменив значение с Выкл на Вкл.

0
Slip

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

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

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

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

Вы либо модифицируете .htaccess file LOCALLY, либо удалите его (LOCALLY)

0
Dia