Apache показывает код PHP вместо его выполнения


108

Недавно я пытался установить PHP и Apache на свой компьютер. Через много часов они установлены. Я изменил файлы httpd.conf и php.ini, как все говорят. Затем я создал простой скрипт PHP:

<?php phpinfo(); ?>

Но когда я пытаюсь запустить его, http://127.0.0.1/phpinfo.phpон просто показывает исходный код вместо его выполнения. Я использую Apache 2, PHP 5 и Windows Vista.

РЕДАКТИРОВАТЬ СТРОКИ:

PHP.INI:

short_open_tag = On

HTTPD.CONF

LoadModule php5_module "C:/php/php5apache2_2.dll"
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
PHPIniDir "C:/php"

в phpinfo.php вы добавили заголовки, которые делают файл .php читаемым?

@Peteris нет, весь мой сценарий в моем вопросе
imulsion

попробуйте простой скрипт: <?php echo "Hello world"; ?>он отображает Hello world? если он отображает код, то как @RabNawaz сказал, что ваш сервер настроен неправильно!

Просто снова отображает код :(
imulsion

1
откуда вы обращаетесь к своему файлу php? обратите внимание, что для того, чтобы запустить php-файл на вашем сервере, вам необходимо поместить файлы в соответствующий корневой каталог. и откройте его в своем веб-браузере как http://localhost/илиhttp://127.0.0.1/
Ибрагим Азхар Армар

Ответы:


90

Вы должны включить php! Проверьте папку mods-enabledв каталоге Apache (по умолчанию:), /etc/apache2/чтобы увидеть, нашли ли вы файл с именем php. Я не помню расширение, но думаю, что это так .so.

Также проверьте, есть /var/log/apache2/error.logли у вас другие ошибки.


8
вы запустили: a2enmod php5
Даниэль Фигероа

6
в моем каталоге apache нет папки mods_enabled
imulsion

@imulsion в моем случае это были моды с поддержкой в ​​/ etc / apache2 /
Silveri

6
В моем случае с php7 мне пришлось это сделать, a2enmod php7.0и это решило мою проблему. Чтобы каким-то образом добраться до этого поста, потребовался целый день!
Роршах

3
Там нет файла называется phpв то mods-enabled, что сейчас? Этот ответ не объясняет материал
Black

63

Вау, здесь много решений! Вот что я сделал в Ubuntu 16.04 :

sudo apt-get install php libapache2-mod-php
sudo a2enmod mpm_prefork && sudo a2enmod php7.0
sudo service apache2 restart

Сработал для меня, добавив --reinstallв apt-get. Возможно, установка модуля php / apache была грязной.
Glastis

Это работает для меня на Digital океана Ubuntu 16,04 сервер Спасибо
Sushant Bhargav

это дает мне следующие ошибки:, Considering conflict php5 for php7.0и Considering conflict mpm_worker for mpm_preforkт.д ... и сбой перезапуска apache2
мрид

Если получится Considering conflict php5 for php7.2перейти /etc/apache2/mods-availableи удалитьphp5.*
Саймон Эпскэмп

39

Для PHP 7 (может применяться и к предыдущим версиям), но мне пришлось сделать следующее:

Добавьте это в конец /etc/apache2/apache2.conf

<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>

Запустите это с терминала:

sudo a2dismod mpm_event && sudo a2enmod mpm_prefork && sudo a2enmod php7

Затем не забудьте перезапустить Apache, чтобы он знал, что вы что-то изменили:

sudo service apache2 restart

Это краткое изложение: https://www.atlantic.net/community/howto/try-php7-lamp-ubuntu-14-04/


3
Мне пришлось сделать это для PHP 5.6 на OSX El Capitan. (Используется стандартный apache, но доморощенный php56)
rfay

1
Работает и в Windows (это означает, что вам не нужно запускать команды терминала в Windows) Спасибо, что избавили меня от бесконечных поисков.
che-azeh 05

при установке из исходников требовалось это соответствие файлов. (config, make и т. д. включает модуль в httpd.conf для меня, но не добавил этот.)
user7296055

В образце файла httpd.conf содержится миллиард комментариев; может кто-нибудь объяснить, почему нет ни одного для php? Это не редко используемая вещь.
Danial

@Danial httpd.apache.org/support.html имеет числовые методы, с помощью которых вы можете находить документы, сообщать об ошибках и задавать вопросы (например, почему нет нормального примера использования PHP в httpd.conf?)
RyanNerd

24

открыть файл

/etc/apache2/httpd.conf

и изменить

#LoadModule php5_module libexec/apache2/libphp5.so

в

LoadModule php5_module libexec/apache2/libphp5.so

Так что просто отключите загрузку модуля PHP в httpd.conf


В моем случае строка начиналась с php7_module - но в остальном это сработало для меня!
b0rgBart3


6

Другой ответ, который сработал для меня. Это для установки[sudo] apt-get install libapache2-mod-php5.X


1
Мой был похож. Я выполнил "sudo apt-cache search ^ libapache2 | grep php", который нашел соответствующие пакеты, а затем установил "sudo apt-get install libapache2-mod-php". libapache2-mod-php7.0 уже установлен.
VectorVortec

3

Хорошо, если вы попробовали то, что вам сказали выше или ранее (возможные причины), и он по-прежнему отображает код вместо его выполнения, тогда есть одна вещь, которую вы делаете неправильно, и которая не была устранена. URL-адрес, который вы использовали для доступа к вашему PHP-коду; некоторые люди пытаются выполнить свой php-код, просто перетаскивая файл .php в веб-браузер. это неправильная практика и может привести к такого рода проблемам. если вы сохранили файл как «test.php» в папке C: // wamp / www, тогда вы должны получить доступ к этому файлу следующим образом: localhost: //test.php. такая ошибка возникнет, если вы получите к нему доступ следующим образом: localhost: //wamp/www/test.php

Надеюсь, я помог кому-то там. о / ~ Даниэль


3

Публикация того, что сработало для меня, поможет кому-то в будущем, хотя это необычный случай.

Я установил обработчик, чтобы заставить мой веб-хостинг использовать более высокую версию php, чем по умолчанию. Была 5.1, но я хотел 5.6, поэтому у меня было вот это:

<FilesMatch \.php$>
    SetHandler php56-cgi
</FilesMatch>

в моем файле .htaccess.

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


3

Apache показывает PHP-код вместо выполнения Исправлена ​​ошибка

1. Открыл php5.6 conf или php7.x conf.

# следующая команда:

$ sudo vi /etc/apache2/mods-enabled/php5.6.conf

2. Прокомментировал следующие строки

введите описание изображения здесь

3. Перезагрузили сервер.

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

4 Наслаждайтесь :)


2

Вы можете удалить свой файл .htaceess и позволить системе создать новый (пустой или основной). Возможно, некоторые из добавленных вами строк являются неправильными операторами или что-то внутри вызывает проблему. Затем вы можете добавить построчно из своего старого файла .htaccess, чтобы узнать, что вызвало проблему.

Это сработало для меня. Строки, говорящие машине не отображать расширения php, были проблемой в моем случае ( RewriteCond и RewriteRule ). Мой старый файл .htaccess отлично работал на общем сервере, но эта проблема появилась, когда я переключился на VPS.


Также, если вы столкнетесь с глупостью CORS: запустите sudo a2enmod headersи sudo a2enmod rewrite(не забудьте перезапустить Apache).
RyanNerd

2

Спасибо другим участникам этой темы за их предложения. Следуя упомянутым шагам, я обнаружил, что сервер apache не может начать сообщать о синтаксической ошибке в loadфайле в формате /etc/apache2/mods-enabled. Оказывается, были включены и php7.0, и php7.1.

a2dismod php7.0
systemctl restart apache2

и php снова отображается правильно.


1

если модуль userdir включен и ваш сайт находится в userdir (~ / public_html), вы должны проверить /etc/apache2/mods-enabled/php5.conf. Следующая часть заставляет его работать (в Ubuntu 14.10 utopic):

# Running PHP scripts in user directories is disabled by default
# 
# 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.

# <IfModule mod_userdir.c>
#     <Directory /home/*/public_html>
#        php_admin_flag engine Off
#    </Directory>
# </IfModule>

1

Если вы являетесь пользователем ubuntu, после установки apache необходимо выполнить следующую команду в новой установке

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt

В моем случае работает нормально.


1

Что сработало для меня:

В активном httpd.conf найдите

<IfModule mime_module>
...
</IfModule>

Не хватало следующего

AddType application/x-httpd-php .php
AddHandler application/x-httpd-php .php

После перезапуска apache файлы .php анализируются правильно.


1

ничего из вышеперечисленного не применимо и не сработало для меня ... PHP7, Apache Httpd 2.2 на CentOS 6

Дело в том, что я установил (все с yum) php ПЕРЕД Apache ... вы должны сделать обратное: всегда сначала устанавливайте Apache, затем PHP, и тогда он работает ... Действительно, вы, вероятно, не хватает libphp7.soиlibphp7-zts.so в/etc/httpd/modules/

Я все равно смог восстановить без удаления PHP. Я добавил волшебную строку /etc/httpd/conf/httpd.conf: AddType application/x-httpd-php .php И затем запустил:yum install php php-mysql


1

Для PHP7 и Apache2.4 это все, что вам нужно сделать:

sudo vim /etc/httpd/conf/httpd.conf

Идем в самый низ и вставляем следующее (само собой):

<FilesMatch "\.*">
SetHandler application/x-httpd-php
</FilesMatch>

Apache теперь будет выполнять все с помощью PHP. Если все, что у вас есть, это файлы html и php, то это вам подойдет. Если у вас есть другие типы файлов, вам необходимо адаптировать файл, соответствующий вашей ситуации. Я тестировал это с помощью phpMyAdmin, и, похоже, проблем ... пока нет.

Мне не было нужно ничего из того, о чем здесь говорят все, о чем здесь говорят. Когда я поместил «AddType Application .....» в нужное место, Apache просто сказал мне, что этот модуль уже загружен, и пропустил его.

Более подробную информацию можно найти здесь: https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch

Моя установка была сделана следующим образом:

sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd

Вам также следует прочитать это, если вы этого не сделали: https://httpd.apache.org/docs/current/howto/htaccess.html#when


0

Это происходило со мной также при запуске $ _POST в MAMP. Все мои файлы .ini и httpd были настроены правильно. Если вы выполняете обработку форм и у вас есть html-документ и вы отправляете информацию в php formhandler, запускающий $ POST, убедитесь, что вы запускаете html-файл с localhost через свой сервер, а не только локально.

Это был ярлык, который я сделал для запуска html-документов, просто щелкнув html-файл в моем каталоге и запустив его в моем веб-браузере, когда на самом деле, чтобы проверить, обрабатывается ли php в вашей форме, вы должны запустить свой html через свои серверы. Очень простой протокол, который я упустил.

Пример:

Неправильно: file:///Applications/MAMP/htdocs/form/form.html

Правильно: http://localhost:your port number/form/form.html

Теперь php должен быть обработан после того, как вы нажмете кнопку отправки


0

У меня была такая же проблема, вызванная конфигурацией модуля Debian / Ubuntu по умолчанию suphp. Он содержал suPHP_Engine offвесь / usr / share, в результате чего в браузере отображались исходники php. Отключение с помощью a2dismod suphpбыло промежуточным решением.


0

У меня такая же проблема. Когда я запускаю файл php, веб-браузер показывал мне код php вместо его выполнения. Я много раз пробовал: удалить / переустановить wampserver64, работать с настройками / модулями PHP / Apache и т. Д. Через 2 дня: я понял, что когда я пытался запустить php-файл в блокноте ++, нажав комбинацию по умолчанию «ctrl +» alt + shift + R "для хрома. Он пытался выполнить мой php-файл, например: "file /// C: / wamp64 / www / bla / bla .." в адресной строке моего Chrome. Это была моя проблема. Я внес изменения в соответствии со страницей Настройка Notepad ++ для запуска php на localhost? . Моя проблема была решена. Но через 2 дня ..


0

Запустите Xampp (apache) от имени администратора. В Google Chrome введите:

localhost/<insert folder name here>/<insert file name>

то есть, если вы создали папку «LearnPhp», а файл - «chapter1.php», введите

localhost/LearnPhp/chapter1.php

Я создал эту папку в папке xampp в папке htdocs, которая создается при загрузке xampp.


0

Решение Debian 9:

touch /etc/apache2/conf-available/php.conf 

Добавьте в файл следующие строки:

<IfModule mod_php5.c>
    <IfModule mod_mime.c>
        AddType application/x-httpd-php .php
    </IfModule>
    <FilesMatch ".+\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
</IfModule>
<IfModule mod_php.c>
    <IfModule mod_mime.c>
        AddType application/x-httpd-php .php
    </IfModule>
    <FilesMatch ".+\.php$">
        SetHandler application/x-httpd-php
    </FilesMatch>
</IfModule>

Затем запустите:

a2enconf php && service apache2 restart

Это сработало для меня, но не изначально. Я запускаю веб-контент в пользовательских каталогах, который по умолчанию отключен. Чтобы включить это, см. Последний раздел в/etc/apache2/mods-available/php7.2.conf
Тони Адамс

0

Иногда, если у вас есть конфликты версий php, это случается. Чтобы преодолеть это, выполните следующие действия.

Шаг 1: установлен список Yum | grep 'php'

если у вас есть несколько версий php, таких как php 5.6 и php 7.0, этот конфликт произойдет

Шаг 2: yum удалите ** вашу версию php **

Шаг 3: Затем перезапустите apapche /etc/init.d/httpd restartилиservice apache2 restart


0

это решение сработало для меня. Я очистил apache2 и переустановил. Произошло это после чистки и установки. Если это первая установка, вы не столкнетесь с этой проблемой.


0

Я пробовал несколько из вышеперечисленных решений, однако в нашем сценарии исправление заключалось в установке модуля fpm.

Мы установили httpd до php, что могло иметь какое-то отношение к проблеме, но для решения мы установили следующее:

yum module install php: 7.2

Это установило модуль php-fpm-7.2.11-4.module + el8.1.0 + 5443 + bc1aeb77.x86_64.rpm, который мы затем включили:

systemctl enable --now php-fpm

С этого момента мы оставили /etc/httpd/conf.d/php.conf по умолчанию и перезапустили httpd.

перезапуск службы httpd

Потом все заработало.

Надеюсь, это поможет, потребовалось больше времени, чем нужно было выяснять.


0

Добавьте следующую конфигурацию в /etc/apache2/apache2.conf

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>

И перезапустите переходное apacheотверстиеsudo service apache2 restart


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