Apache показує PHP-код замість його виконання


107

Я нещодавно намагався встановити 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 читабельним?

@ Петерис не весь мій сценарій у моєму питанні
іммульсія

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

Просто знову відображається код :(
імпульс

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, у моєму випадку це було включено модами під / etc / apache2 /
Silveri

6
У моєму випадку для php7 мені довелося це зробити, a2enmod php7.0і це вирішило мою проблему. Взяв цілий день, щоб якось дійти до цієї посади!
Роршах

3
Там немає файлу називається phpв те mods-enabled, що зараз? Ця відповідь не пояснює речі
Чорний

61

Ого, тут багато рішень! Ось що я зробив на 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 був брудним.
Гластис

Це працювало для мене на сервері Ubuntu 16.04 Digital Ocean. Дякую
Sushant Bhargav

це дає мені наступні помилки:, Considering conflict php5 for php7.0і Considering conflict mpm_worker for mpm_preforkт. д. ... і перезапуск apache2 не вдається
mrid

Якщо ви Considering conflict php5 for php7.2перейдете /etc/apache2/mods-availableта видалитеphp5.*
Simon Epskamp

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) Дякую, що врятував мене нескінченними пошуками.
че-азе

при установці з джерела цей збіг файлів був потрібний. (Конфігурація і make etc. дозволяє модуль в httpd.conf для мене, але не додав цього.)
user7296055

У прикладі файлу httpd.conf є мільярд коментарів; хтось може пояснити, чому для PHP не існує? Це не рідко використовується річ.
Даніял

@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 конф або php7.x конф

# наступна команда:

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

2. Прокоментуйте наступні рядки

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

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

$ sudo служби перезапуск апачу2

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 утопічно):

# 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, потім 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для full / usr / share, в результаті чого в браузері відображалися джерела php. Дезактивація a2dismod suphpбуло тимчасовим рішенням.


0

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


0

Запустіть Xampp (apache) як адміністратор. У типі хрому Google:

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: вимкніть ** вашу версію PHP **

Крок 3: Потім перезапустіть апапче /etc/init.d/httpd restartабоservice apache2 restart


0

Це рішення спрацювало на мене. Я очистив apache2 і перевстановлюю. Це сталося після очищення та встановлення. Якщо це перша установка, ви б не стикалися з цією проблемою.


0

Я спробував ряд рішень вище, однак виправленням у нашому сценарії було встановлення fpm-модуля.

Ми встановили httpd перед php, що, можливо, було пов'язане з проблемою, але для вирішення ми встановили наступне:

yum модуль встановити 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>

І перезапустіть apacheviasudo service apache2 restart

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.