Apache завантажує php-файли, а не відображає їх


92

Інформація про ОС та сервер:

  • 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

але не везе.


Ну як ти його встановив? Який SAPI? Див. Також Як перевірити, які модулі apache увімкнені / встановлені?
mario

2
Ваш php-модуль не запущений.
Сітху

1
перевірте, httpd.confчи коментується модуль php чи ні
MaveRick

1
Я редагував питання. Модулі дійсно виходять і вони, мабуть, завантажуються
Ентоні Гейнор,

Ви перезапустили Apache після встановлення?
Ахмад

Відповіді:


79

Правильним 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, спробуйте переглянути сторінку з іншого браузера - у мене були дні, коли chrome вперто кешує результат, і він продовжує завантажувати вихідний код, тоді як в іншому браузері це нормально.


у моєму випадку немає шляху до модулів
shamaseen

2
Не могли б ви додати якусь інформацію, куди подіти ці рядки?
Sören

6
Для людей, які шукають, де розмістити ці рядки. /etc/httpd/conf/httpd.conf
Siraj Alam

У моєму випадку на Apache-2.4.6 + PHP-7.3.13> LoadModule php7_module modules / libphp7.so
shaojun lyu

22

Я зіткнувся з цим питанням сьогодні, і жодне з описаних рішень не спрацювало для мене. Отже, є ще одна можлива причина:

Якщо у вас є щось на зразок

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

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

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


Ідеально У моєму випадку саме AddHandler application/x-httpd-php54 .php54 .phpце довелося видалити.
Old McStopher

У мене була певна проблема, але я знайшов винний файл .htaccess у домашньому каталозі (один каталог над веб-каталогом "public_html"). Якщо хтось інший має таку ж проблему, шукайте .htaccess також у батьківських каталогах (каскад налаштувань).
Wireblue

У мене був такий файл .htaccess, який я витягнув із веб-хостинг-сервера. Він форсував версію PHP, яка не була встановлена ​​на моєму локальному комп'ютері. Таким чином, віртуальний хост не виконував файл PHP належним чином.
BrightIntelDusk

Це майже напевно проблема, якщо деякі сайти працюють, а інші не працюють. Joomla .htaccess містив AddHandler, але WordPress ні.
Пітер Вустер,

Це спрацювало для мене, просто видалило цей рядок з мого публічного файлу / .htaccess і індекс був завантажений.
PA-GW

16

Після багатьох боротьб я нарешті вирішив проблему.

Якщо вам буде запропоновано завантажити .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).
Gwyneth Llewelyn

6

Будь ласка, ознайомтеся з вашими директивами addtype.

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

Спробуйте це:

AddType text/html .php

Щодо наведеної вище пропозиції, що ви повинні повідомити браузеру, що виводить PHP-скрипт: Мені це здалося незвичною ідеєю. Я погуглив і виявив, що в Інтернеті про це досить багато дискусій. Очевидно, бувають випадки, коли ви можете сказати, що ви надсилаєте PHP-скрипт (хоча Apache повинен виконувати скрипт і видавати текст / 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

Це цікаво, але в моєму випадку він просто видає весь PHP-скрипт, цього разу відформатований як HTML (на відміну від відформатованого лише з ASCII) - не корисно! Проблема тут полягає в тому, що PHP якось працює некоректно, або надсилаються неправильні заголовки ...
Гвінет Ллевелін

Зверніть увагу, що остання директива AddType (коментована у наведеному вище прикладі) призводить до того, що файл .phps досить друкується в HTML. Чи можливо, що ваша конфігурація Apache досить друкує файли .php?
Sam Azer

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

4

Якщо у вашому .htaccess є щось подібне ... AddHandler application / x-httpd-php53 .php .php5 .php4 .php3, тоді прокоментуйте це та спробуйте ще раз оновити це спрацювало для мене ...


3

У мене така сама проблема. Apache не завантажує php-файли з певного веб-сайту, просто завантажив їх. Я прочитав цю публікацію та відповіді, і побачив, що цей рядок потрапив на останнє місце файлу .htaccess:

AddHandler x-mapp-php5.5  .php

Я це прокоментував, і все працює нормально.

Дякую всім !!!


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.


Ага, так, цей хитрий cgi-ублюдок ^^ Вирішив мою проблему після оновлення php з 5,3 до 5,4 теж з dotdeb.
Emii Khaos

2

У мене були подібні симптоми, ще одне рішення: у /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.

2

Якщо хтось використовує php7 в середовищі Linux

Обов’язково увімкніть php7

sudo a2enmod php7

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

sudo systemctl restart mysql
sudo systemctl restart apache2

2

Після оновлення PHP до 7.3, сценарії PHP працюють із www-даними замість $ USER, як раніше.

Мені потрібно було перевстановити та активувати PHP-FPM:

sudo apt-get install php-fpm
sudo a2enmod proxy_fcgi setenvif
sudo service apache2 restart
sudo a2enconf php7.3-fpm
sudo service apache2 restart

Щоб переконатися, що для Virtualmin все було нормально , я скористався майстром повторної перевірки конфігурації у/virtual-server/check.cgi розділі Vitualmin / Налаштування системи .

Після цього Apache / PHP завантажував php-файли, а не запускав їх. Тому мені потрібно було відредагувати, /etc/apache2/mods-available/php7.3.confщоб прокоментувати рядок, SetHandler application/x-httpd-phpяк показано нижче:

<FilesMatch ".+\.ph(ar|p|tml)$">
#    SetHandler application/x-httpd-php
</FilesMatch>

Після перезапуску Apache це вирішило мою проблему, сподіваюся, що це допоможе.

Подбайте і про кеш браузера.

Моя система:

Ubuntu          16.04.6 LTS
Webmin version      1.932
Usermin version     1.780
Virtualmin version  6.08
Apache version      2.4.41
PHP versions        7.3.12
PHP-FPM         7.3.12 Server

1

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

У моїй стандартній установці Ubuntu я розміщував скрипти /var/www. Вони мали бути в /var/www/html.

Я щойно розпочав роботу над PHP, тому не знаю, чи стосується моє рішення зміни до версії, яку ви пройшли.


1

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

sudo apt-get встановити libapache2-mod-php7.0

sudo service apache2 перезапустити


1

У мене була ця проблема. Виявилося, що у мене були встановлені як nginx, так і apache і автоматично запускався при завантаженні. Проблема полягала в тому, що nginx спочатку прив'язувався до порту http, що заважало Apache запускатися.


1

Також можливо, що у вас запущений nginx, але ваш php налаштований на роботу з apache. Щоб перевірити, запустіть service nginx statusі service apache2 statusподивіться, який працює. Якщо nginx працює, а apache ні, просто запустіть, sudo service nginx stop; sudo service apache2 startі ваш сервер тепер буде обслуговувати php-файли, як очікувалося.


1

Добре ... Я знаю, що вже є 1.000.000 відповідей на ці запитання, - але я витратив принаймні 6 ефективних годин, розгадуючи це; і я гуглив це сотні разів і не знайшов жодної публікації про це. Тож я вирішив, що додам тут рішення своєї проблеми.

Висновок

Якби я прокоментував ці два рядки у своїх .conf-файлах у /etc/apache2/[[SERVER-NAME].conf-file:

php_admin_value engine Off
IPCComTimeout 31

Я не уявляю, що вони роблять і як вони там потрапили, - але це є в кожному з моїх .confфайлів. І якщо я видалю ці рядки і переконуюсь, що в /etc/apache2/sites-enabled/-папці є символічне посилання , тоді він не завантажує index.php - і все працює як слід.

Вся історія

У мене встановлений VirtualMin на VPS Ubuntu 16.04. Я перейшов на PHP версії 7.2. Незабаром після цього я оновив версію Ubuntu і вилучив помилку "Зміщення ядра: Вимкнено". Тому мені довелося видалити останню версію Ubuntu - і коли моя ОС знову завантажилася: BOOM! Я отримав помилку, про яку йдеться в його дописі: для кожного веб-сайту мого VPS він просто завантажував index.php замість того, щоб показувати його.

Я пробував всілякі речі:

  • Вилучено PHP7.2 та встановлено PHP5.6 (я тепер знаю, що PHP-версія не має нічого спільного; це конфігурація apache, яка потребує роботи).
  • Спробував увімкнути та вимкнути модулі apache на існуючій установці, але без удачі.
  • Потім я повністю видалив apache і встановив його знову, де після проблеми проблема все ще була !
  • Спробував пограти з налаштуванням Virutal Server у VirtualMin (Webmin >> Сервери >> Веб-сервер Apache).
  • Перевірив конфігурацію на одному віртуальному сервері (Virtualmin >> Системні налаштування >> Перевірити конфігурацію) ... Цей крок був досить приємним, оскільки повідомляв, який модуль в Apache відсутній; де-після я міг увімкнути це за допомогою a2enmod [MODULE_NAME]. І я знайшов назву модуля, погугливши навколо. Мені довелося активувати приблизно 6-8 модулів, перш ніж я пройшов цей крок у валідації - і це зайняло пару хвилин, перш ніж закінчився кеш, - тому це було нудним кроком.
  • І нарешті, я з’ясував написаний вище висновок - разом із символічними посиланнями, - і тоді змусив його працювати. Однак мені довелося пройти це для кожного сайту мого VPS.

0

У мене була подібна проблема з 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

Якщо нічого з вищезазначеного не працює,

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

SetHandler ....

і перезапустіть apache за допомогою

/etc/init.d/httpd restart

Це має спрацювати!



0

У мене така проблема. Ось як я це вирішую. Після встановлення 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 .

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

У мене була ця проблема , і якщо ви на самому справі ніколи не грав з параметрами конфігурації сервера, то ваша проблема 90% в вашому .htaccess файлі

Ви або модифікуєте файл .htaccess ЛОКАЛЬНО, або видаляєте його (ЛОКАЛЬНО)


0

Якщо у вас є virtualmin, спробуйте прокоментувати ці рядки у вашій конфігурації apache в / etc / apache2 / sites-available

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

0

Коли я перейшов з PHP 7.2 до PHP 7.4, я також отримав таку ж проблему. Працювали, роблячи наступне: -

  1. В [domain].conf file , прокоментував наступне:

    php_admin_value двигун вимкнено

І додано:

AddType  application/x-httpd-php-source  .phps
AddType text/html .php
  1. Вимкніть мод 7.2 та увімкніть 7.4, виконавши такі дії:

    a2dismod php7.2
    a2enmod php7.4

  2. В /etc/apache2/mods-enabled/php7.4.conf файлі прокоментуйте наступне:

    Застосування SetHandler / x-httpd-php
    php_admin_flag двигун вимкнено


0

Для людей, які знайшли цю публікацію від Google майже 6 років у майбутньому (і далі!), Ви можете зіткнутися з цією проблемою з Apache 2 і PHP 7, одночасно використовуючи UserDir модуль.

Іншою можливою причиною цієї проблеми може бути те, що ви намагаєтеся запустити сценарій у "каталозі користувача" з UserDirмодуля. Запуск PHP-скриптів у каталогах користувачів за замовчуванням вимкнено. Ви зіткнетеся з цією проблемою, якщо сценарій знаходиться в public_htmlкаталозі вашої домашньої папки, і ви намагаєтеся отримати до нього доступ http://localhost/~your_username.

Щоб це виправити, відкрийте /etc/apache2/mods-enabled/php7.2.conf. Ви повинні прокоментувати або видалити блок тегів внизу, який читає

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

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