it-swarm.com.de

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

Betriebssystem- und Serverinformationen:

  • CentOS 6.4 (Finale)
  • Apache 2.2.15
  • PHP 5.5.1

Ich hatte zuvor PHP 5.3.x installiert, entschied mich jedoch für ein Upgrade. Ich deinstallierte zuerst php 5.3.x und installierte dann php 5.5.1, aber nach Abschluss der Installation analysierte Apache die gerade heruntergeladenen PHP-Dateien nicht. Ich habe ähnliche Fragen hier in stackoverflow geprüft, aber bisher hat mir keine geholfen.

Für den Datensatz 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. Vielen Dank.

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 das 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, aber nicht alles ist nur ein Teil davon. Ich fügte hinzu

AddType text/html .php

aber kein glück.

79
Anthony Gainor

Der korrekte 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 hartnäckig das Ergebnis zwischenspeichert, und der Quellcode wird ständig heruntergeladen, während es in einem anderen Browser in Ordnung ist.

69
Mihkel

Nachdem ich viel gekämpft hatte, habe ich das Problem endlich gelöst.

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

$ Sudo su
$ a2enmod php5

Das ist es.

Wenn Sie immer noch den Fehler erhalten:

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

dann machen Sie folgendes:

Es stellt sich heraus, dass Dateien nicht in mods-enabled gespeichert werden sollten, sondern eher in mods-available. In mods-enabled sollte dann ein Symlink erstellt werden, der auf die in mods-available gespeicherte Datei verweist.

Zuerst das Original entfernen:

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

Dann erstellen Sie den symbolischen Link:

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

Ich hoffe dein Problem ist gelöst.

15
Ravi Shankar

Ich bin heute auf dieses Problem gestoßen und keine der beschriebenen Lösungen funktionierte für mich. Hier ist also eine andere mögliche Ursache:

Wenn du sowas hast

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

in einer .htaccess-Datei Ihres Webinhaltsordners können Ihre PHP -Skripts nicht mehr funktionieren. In meinem Fall kannte der Server den Typ x-mapp-php6 nicht, da diese .htaccess-Datei etwas war, das ich von einem anderen Web-Host importierte, als ich den Inhalt der Website übertrug.

Das Entfernen der AddHandler-Zeile aus der .htaccess-Datei löste dies für mich.

14
markus

Dies kann auf die fehlenden Module zurückzuführen sein, die für Ihr PHP erforderlich sind Wenn Sie PHP 7 installiert haben, suchen Sie nach verfügbaren PHP 7-Modulen 

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
5
Noushad PP

Bitte werfen Sie einen Blick auf Ihre Addtyp-Direktiven. 

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

Bitte versuchen Sie das:

AddType text/html .php

In Bezug auf den obigen Vorschlag sollten Sie dem Browser mitteilen, dass Sie ein PHP - Skript ausgeben: Es schien mir eine ungewöhnliche Idee zu sein. Ich habe gegoogelt und festgestellt, dass es im Internet ziemlich viele Diskussionen darüber gibt. Offenbar 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 dies nicht tut diesen spezifischen Mime-Typ erkennen. 

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

Falls es hilfreich ist, hier eine Kopie meiner /etc/httpd/conf.d/php.conf -Datei von einem Server, auf dem CentOS 5.9 läuft:

#        
# 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
5
Sam Azer

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

4
user252566

Ich habe das gleiche Problem. Apache lädt PHP-Dateien nicht von einer bestimmten Website, sondern lädt sie nur herunter. Ich habe diesen Beitrag und die Antworten gelesen und ich habe 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 !!!

3
Ladislao Garcia

Ich hatte zuvor ein ähnliches Problem, nachdem ich ein Upgrade von 5.3 auf 5.4 vorgenommen hatte. Aber mein Setup sieht ein wenig anders aus, als dass ich Debian betreibe und fcgid zum Server der PHP - Seiten und nicht das PHP5 Apache/cgi-Modul verwende. welches mit meinem fcgid-Setup kollidierte und PHP -Dateien nicht mehr ausführen würde.

Ich musste das Apache-Modul deaktivieren und Apache neu starten

a2dismod php5_cgi
/etc/init.d/Apache2 restart

Nachdem das php5_cgi-Modul aus dem Weg geräumt war, konnte fcgid wieder PHP -Seiten bereitstellen. 

2
derchris

Falls 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
1
MedoAlmasry

Es ist auch möglich, dass Nginx ausgeführt wird, der PHP-Modus jedoch für die Ausführung mit Apache eingerichtet ist. Um zu überprüfen, führen Sie service nginx status und service Apache2 status aus, um zu sehen, welcher gerade läuft. Falls nginx ausgeführt wird und Apache nicht, führen Sie einfach Sudo service nginx stop; Sudo service Apache2 start aus, und der Server stellt nun erwartungsgemäß PHP-Dateien bereit.

1
hexicle

Ich hatte dieses Problem. Es stellte sich heraus, dass sowohl Nginx als auch Apache installiert waren und beim Booten automatisch gestartet wurden. Das Problem war, dass Nginx zuerst an den http-Port bindete, was den Start von Apache verhinderte.

1
dshepherd

Ich hatte ähnliche Symptome und eine andere Lösung: In /etc/Apache2/mods-enabled/php5.conf gab es einen hilfreichen Hinweis 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.
1
qbolec

Ich verbrachte zwei Tage damit, das zu finden, und stellte fest, dass ich meine PHP -Skripts in das falsche Verzeichnis steckte.

Bei meiner standardmäßigen Ubuntu-Installation habe ich die Skripte in /var/www gestellt. Sie hätten in /var/www/html sein sollen.

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

1
Craig Smilovitz

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

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

Sudo-Dienst Apache2 neu starten

1
Marouen Mhiri

Ok ... Ich weiß, dass es bereits 1.000.000 Antworten auf diese Fragen gibt, - aber ich habe mindestens sechs effektive Stunden damit verbracht, diese herauszufinden; und ich habe es hunderte Male gegoogelt und keinen einzigen Beitrag darüber gefunden. Ich dachte 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- Datei auskommentiert habe:

php_admin_value engine Off
IPCComTimeout 31

Ich habe keine Ahnung, was sie tun oder wie sie dorthin gekommen sind - aber es ist in jeder meiner .conf- Dateien. Und wenn ich diese Zeilen entferne und sicherstellen würde, dass es einen Symlink im /etc/Apache2/sites-enabled/- -Ordner gibt, dann lädt sie die index.php nicht herunter - und alles funktioniert so, wie es sollte.

Die ganze Geschichte

Ich habe VirtualMin auf einem Ubuntu 16.04 VPS installiert. Ich habe ein Upgrade auf PHP Version 7.2 durchgeführt. Kurz danach habe ich die Ubuntu-Version aktualisiert und einen 'Kernel Offset: Disabled'-Fehler gefunden. Also musste ich die neueste Ubuntu-Version löschen - und als mein Betriebssystem wieder hochgefahren ist: BOOM! Ich habe den Fehler erhalten, über den sein Beitrag spricht: Für jede Website in meiner 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 funktioniert). 
  • Versucht, Apache-Module in der vorhandenen Installation zu aktivieren und zu deaktivieren, jedoch ohne Erfolg. 
  • Dann habe ich Apache komplett entfernt und es wieder installiert, woher das Problem noch da war!
  • Ich habe versucht, mit dem Virutal Server-Setup in VirtualMin herumzuspielen (Webmin >> Server >> Apache Webserver). 
  • Überprüfte die Konfiguration auf einem einzelnen virtuellen Server (Virtualmin >> Systemeinstellungen >> Konfiguration erneut prüfen) ... Dieser Schritt war ziemlich schön, da er mitteilte, welches Modul in Apache fehlte. wohin könnte ich es mit a2enmod [MODULE_NAME] aktivieren. Und ich habe den Modulnamen durch Googeln gefunden. Ich musste etwa 6-8 Module aktivieren, bevor ich diesen Schritt in der Validierung überstanden hatte - und es dauerte ein paar Minuten, bis der Cache leer war. Dies war ein langwieriger Schritt.
  • Und schließlich habe ich die oben geschilderte Schlussfolgerung zusammen mit den Symlinks herausgefunden - und dann habe ich es geschafft. Ich musste es jedoch für jede Site auf meiner VPS durchgehen. 
0
Zeth

Wenn keiner der oben genannten funktioniert,

kommentieren Sie die Zeile aus

SetHandler ....

und starten Sie Apache erneut mit 

/etc/init.d/httpd restart

Es sollte funktionieren!

0
Cosmo Arun

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

Sudo apt-get install php libapache2-mod-php

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

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" " "

Auf meinem Computer sind verschiedene Versionen von PHP -Versionen installiert. Dann entferne ich einige PHP -Pakete mit apt-get bereinigen 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 Modul PHP geladen ist

$ a2query -m php7.0

wenn nicht aktiviert mit:

$ Sudo a2enmod php7.0

Starten Sie Apache Server neu

$ Sudo systemctl restart Apache2

Zum Schluss überprüfe ich PHP process 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.

<?php
  phpinfo();
?>

Überprüfen Sie im Browser:

http: //localhost/info.php

es zeigt sich richtig. Ich denke, das wird jedem helfen.

0

Ich hatte ein ähnliches Problem mit dem OP, wenn ich php5 von einer älteren Version auf 5.5.9 aufrief. Dies ist die mit Mint 17 installierte Version.

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

Nach dem Upgrade werden Dateien, die auf der tatsächlichen Site einwandfrei laufen und angezeigt werden, nicht oder nur HTML auf dem lokalen Computer angezeigt. PHP wurde nicht analysiert. Der Befehl phpinfo () hat funktioniert, also wusste ich, dass PHP sonst funktioniert. Das Protokoll hat keine Fehler generiert. Beim Anzeigen der Seitenquelle wurde der tatsächliche PHP-Code angezeigt.

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

<?php phpinfo(); ?>

Das hat funktioniert. Dann entdeckte ich, als ich <?php in <? änderte, der Befehl funktionierte nicht mehr. Alle meine PHP-Sites verwenden <? anstelle von <?php, was vielleicht nicht ideal ist, 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 Off in On geändert habe.

0
Slip

Wenn Sie über virtualmin verfügen, können Sie diese Zeilen auskommentierenin Ihrer Apache-Konfiguration in/etc/Apache2/sites-available

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

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

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

Sie ändern entweder .htaccess LOCALLY oder löschen es (LOCALLY).

0
Dia