Apache lädt PHP-Dateien herunter, anstatt sie anzuzeigen


91

Betriebssystem- und Serverinformationen:

  • CentOS 6.4 (endgültig)
  • Apache 2.2.15
  • PHP 5.5.1

Ich hatte zuvor PHP 5.3.x installiert, entschied mich aber für ein Upgrade. Ich habe zuerst PHP 5.3.x deinstalliert und dann PHP 5.5.1 installiert, aber nach Abschluss der Installation hat Apache die PHP-Dateien nicht analysiert, sondern sie nur heruntergeladen. Ich habe ähnliche Fragen hier im Stackoverflow geprüft, aber keine davon hat mir bisher geholfen.

Für die Aufzeichnung habe ich die folgenden Zeilen in meiner httpd.conf und php.conf, die PHP funktionieren lassen sollten, aber nicht:

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

Ich würde mich über jede Hilfe sehr freuen. Danke dir.

BEARBEITEN:

Ich habe diese Zeilen in der php.conf

<IfModule !worker.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>

BEARBEITEN:

Durch Entfernen der

AddType application/x-httpd-php .php5 .php4 .php .php3 .php2 .phtml

Apache lädt die Datei nicht mehr herunter. Jetzt zeigt Apache den Quellcode an, aber nicht alles ist nur ein Teil davon. Ich fügte hinzu

AddType text/html .php

aber kein Glück.


Nun, wie hast du es installieren? Welches SAPI? Siehe auch So überprüfen Sie, welche Apache-Module aktiviert / installiert sind
Mario

2
Ihr PHP-Modul läuft nicht.
Sithu

1
Überprüfen Sie, httpd.confob das PHP-Modul kommentiert ist oder nicht
MaveRick

1
Ich habe die Fragen bearbeitet. Die Module werden beendet und sie werden anscheinend geladen
Anthony Gainor

Haben Sie Apache nach der Installation neu gestartet?
Ahmad

Antworten:


79

Der richtige AddType für PHP ist application / x-httpd-php

AddType  application/x-httpd-php         .php
AddType  application/x-httpd-php-source  .phps

Stellen Sie außerdem sicher, dass Ihr PHP-Modul geladen ist

LoadModule php5_module        modules/mod_php55.so

Wenn Sie Apache konfigurieren, versuchen Sie, die Seite in einem anderen Browser anzuzeigen. Ich hatte Tage, an denen Chrome das Ergebnis hartnäckig zwischenspeichert und den Quellcode weiterhin herunterlädt, während es in einem anderen Browser in Ordnung ist.


In meinem Fall gibt es keinen
Modulpfad

2
Könnten Sie einige Informationen hinzufügen, wo diese Zeilen platziert werden sollen?
Sören

6
Für Leute, die suchen, wo diese Zeilen platziert werden sollen. /etc/httpd/conf/httpd.conf
Siraj Alam

In meinem Fall auf Apache-2.4.6 + PHP-7.3.13> LoadModule php7_module modules / libphp7.so
shaojun lyu

21

Ich bin heute auf dieses Problem gestoßen, und keine der beschriebenen Lösungen hat bei mir funktioniert. Also hier ist eine andere mögliche Ursache:

Wenn Sie so etwas haben

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

In einer .htaccessDatei Ihres Webinhaltsordners kann dies dazu führen, dass Ihre PHP-Skripte nicht mehr funktionieren. In meinem Fall kannte der Server den x-mapp-php6Typ nicht, da .htaccessich diese Datei von einem anderen Webhost importiert habe, als ich den Inhalt der Website übertragen habe.

Nur das Entfernen der AddHandlerZeile aus der .htaccessDatei löste es für mich.


Perfekt. In meinem Fall AddHandler application/x-httpd-php54 .php54 .phpmusste das entfernt werden.
Old McStopher

Ich hatte ein Problem, fand aber die schuldige .htaccess-Datei im Home-Verzeichnis (ein Verzeichnis über dem Webverzeichnis "public_html"). Wenn jemand anderes das gleiche Problem hat, suchen Sie auch in übergeordneten Verzeichnissen nach .htaccess (die Einstellungskaskade).
Wireblue

Ich hatte eine solche .htaccess-Datei, die ich von einem Webhosting-Server abgerufen hatte. Es wurde eine Version von PHP erzwungen, die nicht auf meinem lokalen Computer installiert war. Daher hat der virtuelle Host die PHP-Datei nicht ordnungsgemäß ausgeführt.
BrightIntelDusk

Dies ist mit ziemlicher Sicherheit das Problem, wenn einige Websites funktionieren und andere nicht. Joomla .htaccess enthielt einen AddHandler, WordPress jedoch nicht.
Peter Wooster

Dies hat bei mir funktioniert. Ich habe gerade diese Zeile aus meiner öffentlichen / .htaccess-Datei entfernt und der Index wurde geladen.
PA-GW

16

Nachdem ich viel gekämpft hatte, löste ich endlich das Problem.

Wenn Sie aufgefordert werden, eine .phpDatei herunterzuladen , anstatt sie auszuführen, ist hier die perfekte Lösung: Ich gehe davon aus, dass Sie PHP5 bereits installiert haben und immer noch diesen Fehler erhalten.

$ sudo su
$ a2enmod php5

Das ist es.

Aber wenn Sie immer noch den Fehler bekommen:

Config file php5.conf not properly enabled: /etc/apache2/mods-enabled/php5.conf is a real file, not touching it

dann mache folgendes:

Es stellte sich heraus, dass Dateien nicht in mods-enabled, sondern in gespeichert werden sollten mods-available. Ein Symlink sollte dann in Mods-fähig erstellt werden und auf die in Mods-Available gespeicherte Datei verweisen.

Entfernen Sie zuerst das Original:

$ mv /etc/apache2/mods-enabled/php5.conf /etc/apache2/mods-available/

Erstellen Sie dann den symbolischen Link:

$ ln -s /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php5.conf

Ich hoffe dein Problem ist gelöst.


2
Beachten Sie, dass dies nur unter Linux (und speziell unter Debian Linux) funktioniert.
Gwyneth Llewelyn

6

Bitte werfen Sie einen Blick auf Ihre addtype-Direktiven.

Es sieht für mich so aus, als würde Apache dem Browser mitteilen, dass er eine Dokumentanwendung / PHP für Skripte mit Erweiterungen wie .php5 sendet. Tatsächlich soll Apache dem Browser mitteilen, dass das Skript Text / HTML ausgibt.

Bitte versuchen Sie dies:

AddType text/html .php

In Bezug auf den obigen Vorschlag, dass Sie dem Browser mitteilen sollten, dass Sie ein PHP-Skript ausgeben: Es schien mir eine ungewöhnliche Idee zu sein. Ich habe es gegoogelt und festgestellt, dass es im Web ziemlich viele Diskussionen darüber gibt. Anscheinend gibt es Fälle, in denen Sie vielleicht sagen möchten, dass Sie ein PHP-Skript senden (obwohl Apache das Skript ausführen und Text / HTML ausgeben soll), und es gibt auch Fälle, in denen der Browser diesen bestimmten Mime einfach nicht erkennt Art.

Das Löschen des Browser-Cache ist immer eine gute Idee.

Falls es hilfreich ist, finden Sie hier eine Kopie meiner Datei /etc/httpd/conf.d/php.conf von einem Server mit 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

Das ist interessant, aber in meinem Fall wird nur das gesamte PHP-Skript ausgegeben, diesmal als HTML formatiert (im Gegensatz zu nur mit ASCII formatierten) - nicht nützlich! Das Problem hier ist, dass PHP irgendwie nicht richtig ausgeführt wird oder die falschen Header gesendet werden ...
Gwyneth Llewelyn

Beachten Sie, dass die letzte AddType-Direktive (die im obigen Beispiel auskommentiert ist) bewirkt, dass eine .phps-Datei in HTML hübsch gedruckt wird. Ist es möglich, dass Ihre Apache-Konfiguration .php-Dateien hübsch druckt?
Sam Azer

5

Dies kann aufgrund der fehlenden Module geschehen, die für Ihre PHP erforderlich sind. Angenommen, Sie haben PHP7 installiert, suchen Sie nach verfügbaren PHP7-Modulen mit

sudo apt-cache search php7-*

Der obige Befehl listet alle verfügbaren PHP7-Module für die Installation auf. Sie können mit der Installation von Modulen wie:

sudo apt-get install libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json

4

Wenn Ihr .htaccess so etwas hat ... AddHandler-Anwendung / x-httpd-php53 .php .php5 .php4 .php3, dann kommentieren Sie es und versuchen Sie erneut, dies zu aktualisieren.


3

Ich habe das gleiche Problem. Apache lädt keine PHP-Dateien von einer bestimmten Website, sondern lädt sie einfach herunter. Ich habe diesen Beitrag und die Antworten gelesen und gesehen, dass ich diese Zeile an der letzten Stelle der .htaccess-Datei habe:

AddHandler x-mapp-php5.5  .php

Ich habe es kommentiert und alles funktioniert gut.

Dank an alle !!!


2

Ich habe zuvor ein ähnliches Problem, nachdem ich von 5.3 auf 5.4 aktualisiert habe. Aber mein Setup sieht ein bisschen anders aus, da ich Debian verwende und fcgid verwende, um die PHP-Seiten zu bedienen, und nicht das PHP5-Apache / CGI-Modul. Nach dem Upgrade wurde auch php5_cgi installiert, das mit meinem fcgid-Setup kollidierte und keine PHP-Dateien mehr ausführte.

Ich musste das Apache-Modul deaktivieren und Apache neu starten

a2dismod php5_cgi
/etc/init.d/apache2 restart

Sobald das Modul php5_cgi nicht mehr im Weg war, konnte fcgid wieder PHP-Seiten bereitstellen.


Aww yeah, dieser knifflige CGI-Bastard ^^ Mein Problem wurde gelöst, nachdem ich PHP von Dotdeb von 5.3 auf 5.4 aktualisiert hatte.
Emii Khaos

2

Ich hatte ähnliche Symptome, noch eine andere Lösung: In /etc/apache2/mods-enabled/php5.conf gab es einen hilfreichen Rat in dem Kommentar, dem ich folgte:

# 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

Für den Fall, dass jemand PHP7 in einer Linux-Umgebung verwendet

Stellen Sie sicher, dass Sie PHP7 aktivieren

sudo a2enmod php7

Starten Sie den MySQL-Dienst und Apache neu

sudo systemctl restart mysql
sudo systemctl restart apache2

2

Nach der Aktualisierung von PHP auf 7.3 wurden PHP-Skripte mit www-Daten anstelle von $ USER wie zuvor ausgeführt.

Ich musste PHP-FPM neu installieren und aktivieren:

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

Um sicherzustellen, dass für Virtualmin alles in Ordnung ist , habe ich den Assistenten zum erneuten Überprüfen der Konfiguration/virtual-server/check.cgi unter Vitualmin / Systemeinstellungen verwendet .

Danach lud Apache / PHP PHP-Dateien herunter, anstatt sie auszuführen. Also musste ich bearbeiten, /etc/apache2/mods-available/php7.3.confum die Zeile SetHandler application/x-httpd-phpwie folgt zu kommentieren :

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

Nach dem Neustart von Apache hat es mein Problem gelöst, hoffe diese Hilfe.

Kümmere dich auch um den Browser-Cache.

Mein System:

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

Ich habe zwei Tage damit verbracht, dies zu verfolgen und festgestellt, dass ich meine PHP-Skripte in das falsche Verzeichnis gestellt habe.

Bei meiner Standard-Ubuntu-Installation habe ich die Skripte eingefügt /var/www. Sie hätten drin sein sollen/var/www/html .

Ich habe gerade mit der PHP-Arbeit begonnen, daher weiß ich nicht, ob sich meine Lösung auf die Versionsänderung bezieht, die Sie durchlaufen haben.


1

Dies löste das Problem für mich (ich habe PHP7 installiert):

sudo apt-get install libapache2-mod-php7.0

sudo service apache2 neu starten


1

Ich hatte dieses Problem. Es stellte sich heraus, dass ich sowohl Nginx als auch Apache installiert hatte und automatisch beim Booten startete. Das Problem war, dass Nginx zuerst an den http-Port gebunden wurde, wodurch der Start von Apache verhindert wurde.


1

Es ist auch möglich, dass Sie Nginx laufen lassen, aber Ihr PHP ist so eingerichtet, dass es mit Apache läuft. Um zu überprüfen, ausführen service nginx statusund service apache2 statuszu sehen, welche ausgeführt wird. Für den Fall, dass nginx ausgeführt wird und Apache nicht, führen Sie es einfach aus sudo service nginx stop; sudo service apache2 startund Ihr Server stellt nun wie erwartet PHP-Dateien bereit.


1

Ok ... Ich weiß, dass es bereits 1.000.000 Antworten auf diese Fragen gibt, aber ich habe mindestens 6 effektive Stunden damit verbracht, diese herauszufinden. und ich habe es hunderte Male gegoogelt und keinen einzigen Beitrag darüber gefunden. Also dachte ich mir, dass ich hier die Lösung für mein Problem hinzufügen würde.

Die Schlussfolgerung

Wenn ich diese beiden Zeilen in meinen .conf-Dateien in der /etc/apache2/[[SERVER-NAME].conf-file auskommentiert habe:

php_admin_value engine Off
IPCComTimeout 31

Ich habe keine Ahnung, was sie tun oder wie sie dorthin gekommen sind - aber es steht in jeder meiner .confDateien. Und wenn ich diese Zeilen entferne und sicherstelle, dass sich ein Symlink im /etc/apache2/sites-enabled/Ordner befindet, wird die Datei index.php nicht heruntergeladen - und alles funktioniert wie es sollte.

Die ganze Geschichte

Ich habe VirtualMin auf einem Ubuntu 16.04 VPS installiert. Ich habe auf PHP Version 7.2 aktualisiert. Kurz danach habe ich die Ubuntu-Version aktualisiert und einen 'Kernel Offset: Disabled'-Fehler festgestellt. Also musste ich die neueste Ubuntu-Version löschen - und als mein Betriebssystem wieder hochfuhr: BOOM! Ich habe den Fehler erhalten, über den sein Beitrag spricht: Für jede Site auf meinem VPS wurde einfach die index.php heruntergeladen, anstatt sie anzuzeigen.

Ich habe alle möglichen Sachen ausprobiert:

  • PHP7.2 entfernt und PHP5.6 installiert (ich weiß jetzt, dass die PHP-Version nichts damit zu tun hat; es ist die Apache-Konfiguration, die Arbeit braucht).
  • Versucht, Apache-Module in der vorhandenen Installation zu aktivieren und zu deaktivieren, aber ohne Glück.
  • Dann habe ich Apache komplett entfernt und erneut installiert, woraufhin das Problem immer noch bestand da war!
  • Ich habe versucht, mit dem Virutal Server-Setup in VirtualMin (Webmin >> Server >> Apache Webserver) herumzuspielen.
  • Überprüfte die Konfiguration auf einem einzelnen virtuellen Server (Virtualmin >> Systemeinstellungen >> Konfiguration erneut überprüfen) ... Dieser Schritt war ziemlich nett, da er feststellte, welches Modul in Apache fehlte. wo-danach könnte ich es mit aktivierena2enmod [MODULE_NAME] . Und ich habe den Modulnamen durch Googeln gefunden. Ich musste ungefähr 6-8 Module aktivieren, bevor ich diesen Schritt in der Validierung hinter mir hatte - und es dauerte ein paar Minuten, bis der Cache leer war -, also war dies ein mühsamer Schritt.
  • Und zuletzt habe ich - zusammen mit den Symlinks - die oben geschriebene Schlussfolgerung herausgefunden und sie dann zum Laufen gebracht. Ich musste es jedoch für jede Site auf meinem VPS durchgehen.

0

Ich hatte ein ähnliches Problem wie das OP beim Upgrade von PHP5 von einer älteren Version auf 5.5.9, die mit Mint 17 installierte Version.

Ich führe ein LAMP-Setup auf einem Computer in meinem lokalen Netzwerk aus, mit dem ich Änderungen an Websites in der Vorschau ansehe, bevor ich diese Änderungen auf den tatsächlichen Live-Server hochlade. So pflege ich einen perfekten lokalen Spiegel der tatsächlichen Site.

Nach dem Upgrade werden Dateien, die auf der tatsächlichen Site perfekt ausgeführt und angezeigt werden, nicht oder nur HTML auf dem lokalen Computer angezeigt. PHP wurde nicht analysiert. Der Befehl phpinfo () hat funktioniert, daher wusste ich, dass php ansonsten funktioniert. Das Protokoll hat keine Fehler generiert. Das Anzeigen der Seitenquelle zeigte mir den tatsächlichen PHP-Code.

Ich hatte eine test.php-Seite erstellt, die den folgenden Code enthielt:

<?php phpinfo(); ?>

Das hat funktioniert. Dann stellte ich fest, dass der Wechsel <?phpzum <?Befehl nicht mehr funktionierte. Alle meine PHP-Sites verwenden, <?anstatt <?phpvielleicht nicht ideal, aber es ist die Realität. Ich habe das Problem behoben, indem ich zu / etc / php5 / apache2 gegangen bin, nach "short_open_tag" gesucht und den Wert von Aus in Ein geändert habe.


0

Wenn keines der oben genannten Verfahren funktioniert,

versuche die Zeile auskommentieren

SetHandler ....

und starten Sie Apache mit neu

/etc/init.d/httpd restart

Es sollte funktionieren!


0

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

Ich habe so ein Problem. So löse ich es. Nach der Installation von Apache habe ich PHP mit diesem Befehl installiert .

sudo apt-get install php libapache2-mod-php

es wird korrekt ausgeführt, aber ich fordere eine PHP- Datei von Apache an, die es gibt, ohne das PHP auszuführen Skript .

Dann überprüfe ich, ob PHP aktiviert ist.

$ cd /etc/apache2
$ ls -l mods-*/*php*

aber es zeigte keine Ergebnisse. Ich überprüfe installierte PHP-Pakete.

$ dpkg -l | grep php| awk '{print $2}' |tr "\n" " "

Verschiedene Arten von PHP- Versionen, die auf meinem Computer installiert sind. Dann entferne ich einige PHP- Pakete mit apt-get purge aus meiner vorherigen Liste .

sudo apt-get purge libapache2-mod-php7.0 php7.0 php7.0-cli php7.0-common php7.0-json

Ich installiere PHP neu

sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql

Stellen Sie sicher, dass das PHP-Modul geladen ist

$ a2query -m php7.0

wenn nicht aktiviert mit:

$ sudo a2enmod php7.0

Starten Sie den Apache- Server neu

$ sudo systemctl restart apache2

Schließlich überprüfe ich den PHP- Prozess auf Apache

Erstellen Sie eine leere Datei

sudo vim /var/www/html/info.php

Fügen Sie diesen Inhalt zu info.php hinzu und speichern Sie ihn.

<?php
  phpinfo();
?>

Überprüfen Sie im Browser:

http: //localhost/info.php

Ich denke, das wird jedem helfen.


0

Ich hatte dieses Problem und wenn Sie tatsächlich nie mit Ihren Serverkonfigurationseinstellungen gespielt haben, liegt Ihr Problem zu 90% in Ihrem .htaccess Datei

Sie können die .htaccess- Datei entweder LOKAL ändern oder löschen (LOKAL)


0

Wenn Sie über virtualmin verfügen, versuchen Sie, diese Zeilen in Ihrer Apache-Konfiguration in / etc / apache2 / sites-available auskommentieren

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

0

Als ich ein Upgrade von PHP 7.2 auf PHP 7.4 durchführte, bekam ich auch das gleiche Problem. Arbeitete wie folgt: -

  1. In [domain].conf file, kommentiert folgendes:

    php_admin_value engine Aus

Und hinzugefügt:

AddType  application/x-httpd-php-source  .phps
AddType text/html .php
  1. Deaktiviere Mod 7.2 und aktiviere 7.4 wie folgt:

    a2dismod php7.2
    a2enmod php7.4

  2. /etc/apache2/mods-enabled/php7.4.confKommentar in der Datei wie folgt:

    SetHandler-Anwendung / x-httpd-php
    php_admin_flag engine Off


0

Für Leute, die diesen Beitrag von Google in fast 6 Jahren (und darüber hinaus!) Gefunden haben, kann dieses Problem mit Apache 2 und PHP 7 auftreten, während Sie auch das verwenden UserDir Modul verwenden.

Eine andere mögliche Ursache für dieses Problem könnte sein, dass Sie versuchen, das Skript in einem "Benutzerverzeichnis" vom UserDirModul aus auszuführen . Das Ausführen von PHP-Skripten in Benutzerverzeichnissen ist standardmäßig deaktiviert. Dieses Problem tritt auf, wenn sich das Skript im public_htmlVerzeichnis Ihres Basisordners befindet und Sie versuchen, von dort aus darauf zuzugreifen http://localhost/~your_username.

Um dies zu beheben, öffnen Sie /etc/apache2/mods-enabled/php7.2.conf. Sie müssen den Tag-Block unten, der lautet, kommentieren oder löschen

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

-1

Wenn Ihr .htaccess so etwas hat

AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.