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
Helmy
источник
Сработал для меня, добавив --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

inigo333
источник
В моем случае строка начиналась с 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

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

DAniel
источник
3

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

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

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

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

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

Evanmcd
источник
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 снова отображается правильно.

djnz0feh
источник
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>
user906489
источник
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

Berhauz
источник
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 должен быть обработан после того, как вы нажмете кнопку отправки

Maidenastraea
источник
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

sachin_ur
источник
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

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

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

Брен1818
источник
0

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

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

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

Имран Захур
источник
0

В моем случае с PHP7.3 Apache2.4 Ubuntu 18.04 мне пришлось выполнить:

$ a2enmod actions fastcgi alias proxy_fcgi
Василий Паскаль
источник