Apache zeigt PHP-Code an, anstatt ihn auszuführen

107

Ich habe kürzlich versucht, PHP und Apache auf meinem Computer zu installieren. Nach vielen Stunden sind sie installiert. Ich habe die Dateien httpd.conf und php.ini geändert, wie jeder sagt. Ich habe dann ein einfaches PHP-Skript erstellt:

<?php phpinfo(); ?>

Aber wenn ich versuche, es damit auszuführen, http://127.0.0.1/phpinfo.phpwird nur der Quellcode angezeigt, anstatt ihn auszuführen. Ich verwende Apache 2, PHP 5 und Windows Vista.

BEARBEITETE LINIEN:

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"
Imulsion
quelle
Haben Sie in phpinfo.php einige Header hinzugefügt, die die .php-Datei lesbar machen?
@ Peteris nein mein ganzes Skript ist in meiner Frage
Imulsion
versuchen Sie es mit einem einfachen Skript: <?php echo "Hello world"; ?>Zeigt es Hello World an? Wenn der Code angezeigt wird, ist Ihr Server laut @RabNawaz nicht richtig konfiguriert.
Zeigt
1
Von wo aus greifen Sie auf Ihre PHP-Datei zu? Bitte beachten Sie, dass Sie Ihre Dateien im richtigen Webstammverzeichnis ablegen müssen, um die PHP-Datei von Ihrem Server ausführen zu können. und greifen Sie in Ihrem Webbrowser darauf zu als http://localhost/oderhttp://127.0.0.1/
Ibrahim Azhar Armar

Antworten:

90

Sie müssen PHP aktivieren! Überprüfen Sie den Ordner mods-enabledim Apache-Verzeichnis (Standard :) /etc/apache2/, um festzustellen, ob Sie eine Datei mit dem Namen finden php. Ich erinnere mich nicht an die Erweiterung, aber ich denke es ist .so.

Überprüfen Sie auch /var/log/apache2/error.log, ob Sie weitere Fehler haben.

Daniel Figueroa
quelle
8
hast du gelaufen: a2enmod php5
Daniel Figueroa
6
Es gibt keinen mods_enabled Ordner in meinem Apache Verzeichnis
Imulsion
@imulsion in meinem Fall war es mods-fähig unter / etc / apache2 /
Silveri
6
In meinem Fall für PHP7 musste ich tun a2enmod php7.0und es löste mein Problem. Es hat den ganzen Tag gedauert, um diesen Beitrag irgendwie zu erreichen!
Rorschach
3
Es gibt keine Datei mit dem Namen phpin mods-enabled, was jetzt? Diese Antwort erklärt nichts
Black
58

Wow, viele Lösungen hier! Folgendes habe ich unter Ubuntu 16.04 gemacht :

sudo apt-get install php libapache2-mod-php
sudo a2enmod mpm_prefork && sudo a2enmod php7.0
sudo service apache2 restart
helmy
quelle
Arbeitete für mich durch Hinzufügen --reinstallzu apt-get. Möglicherweise war die Installation des PHP-Moduls / Apache fehlerhaft.
Glastis
Dies funktionierte für mich auf dem Ubuntu 16.04-Server von Digital Ocean. Danke
Sushant Bhargav,
das gibt mir die folgenden Fehler: Considering conflict php5 for php7.0, Considering conflict mpm_worker for mpm_preforkusw ... und apache2 Neustart fehlschlägt
MRID
Wenn Sie Considering conflict php5 for php7.2gehen /etc/apache2/mods-availableund löschenphp5.*
Simon Epskamp
39

Für PHP 7 (gilt möglicherweise auch für frühere Versionen), aber ich musste dies tun:

Fügen Sie dies am Ende von /etc/apache2/apache2.conf hinzu

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

Führen Sie dies vom Terminal aus:

sudo a2dismod mpm_event && sudo a2enmod mpm_prefork && sudo a2enmod php7

Dann vergessen Sie nicht, Apache neu zu starten, damit Sie wissen, dass Sie etwas geändert haben:

sudo service apache2 restart

Dies ist eine Zusammenfassung von: https://www.atlantic.net/community/howto/try-php7-lamp-ubuntu-14-04/

RyanNerd
quelle
3
Ich musste dies für PHP 5.6 unter OSX El Capitan tun. (Mit Stock Apache, aber Homebrew PHP56)
Rfay
1
Funktioniert auch unter Windows (dh Sie müssen die Terminalbefehle nicht unter Windows ausführen). Vielen Dank, dass Sie mir endlose Suchanfragen erspart haben.
Che-Azeh
Bei der Installation von der Quelle war dieser Dateimatch erforderlich. (Die Konfiguration und Make usw. aktiviert das Modul in httpd.conf für mich, hat dieses aber nicht hinzugefügt.)
user7296055
Die Beispieldatei httpd.conf enthält eine Milliarde Kommentare. Kann jemand erklären, warum es keine für PHP gibt? Es ist keine selten benutzte Sache.
Danial
@Danial httpd.apache.org/support.html verfügt über eine Reihe von Methoden, mit denen Sie Dokumente finden, Fehler melden und Fragen stellen können (z. B. warum gibt es in httpd.conf kein vernünftiges Beispiel für die Verwendung von PHP?)
RyanNerd
24

öffne die Datei

/etc/apache2/httpd.conf

und ändern

#LoadModule php5_module libexec/apache2/libphp5.so

in

LoadModule php5_module libexec/apache2/libphp5.so

Also einfach das Laden des PHP-Moduls aufheben httpd.conf

inigo333
quelle
In meinem Fall begann die Zeile mit php7_module - aber ansonsten hat das bei mir funktioniert!
b0rgBart3
6

Eine andere Antwort, die für mich funktioniert hat. Ist das zu installieren[sudo] apt-get install libapache2-mod-php5.X

Simon Mohoalali
quelle
1
Meins war ähnlich. Ich habe "sudo apt-cache search ^ libapache2 | grep php" durchgeführt, um die relevanten Pakete zu finden, und dann "sudo apt-get install libapache2-mod-php" installiert. libapache2-mod-php7.0 wurde bereits installiert.
VectorVortec
3

Okay, wenn Sie versucht haben, was Ihnen oben oder früher gesagt wurde (was mögliche Gründe sind) und der Code immer noch angezeigt wird, anstatt ihn auszuführen, dann gibt es eine Sache, die Sie falsch machen und die nicht angesprochen wurde. Die URL, mit der Sie auf Ihren PHP-Code zugegriffen haben. Einige Leute versuchen, ihren PHP-Code auszuführen, indem sie einfach die PHP-Datei in den Webbrowser ziehen. Dies ist eine falsche Praxis und kann zu solchen Problemen führen. Wenn Sie eine Datei als "test.php" im Ordner C: // wamp / www gespeichert haben, müssen Sie auf diese Datei folgendermaßen zugreifen: localhost: //test.php. Diese Art von Fehler tritt auf, wenn Sie auf diese Weise darauf zugreifen: localhost: //wamp/www/test.php

Ich hoffe, ich habe da draußen jemandem geholfen. o / ~ Daniel

DAniel
quelle
3

Das Posten, was für mich funktioniert hat, hilft jemandem auf der Straße, obwohl es ein ungewöhnlicher Fall ist.

Ich hatte einen Handler eingerichtet, um meinen Webhost zu zwingen, eine höhere Version von PHP als die Standardversion zu verwenden. Es gab 5.1, aber ich wollte 5.6, also hatte ich folgendes:

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

in meiner .htaccess-Datei.

Beim Versuch, meine Site lokal auszuführen, wurde PHP-Code an den Browser ausgegeben. Das Entfernen löste das Problem.

evanmcd
quelle
3

Apache zeigt PHP-Code an, anstatt das Problem zu beheben

1. Php5.6 conf oder php7.x conf geöffnet

# folgenden Befehl:

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

2. Kommentierte folgende Zeilen

Geben Sie hier die Bildbeschreibung ein

3. Starten Sie den Server neu

$ sudo service apache2 neu starten

4 Viel Spaß :)

Matthew Farrell
quelle
2

Sie können Ihre .htaceess- Datei löschen und das System eine neue (leere oder einfache) erstellen lassen. Es kann sein, dass einige von Ihnen hinzugefügte Zeilen falsche Anweisungen sind oder dass etwas anderes darin das Problem verursacht. Sie können dann Zeile für Zeile aus Ihrer alten .htaccess- Datei hinzufügen, um zu sehen, was das Problem verursacht hat.

Das hat bei mir funktioniert. Die Zeilen, in denen die Maschine angewiesen wurde, keine PHP-Erweiterungen anzuzeigen, waren in meinem Fall ein Problem ( RewriteCond und RewriteRule ). Meine alte .htaccess- Datei funktionierte auf einem gemeinsam genutzten Server einwandfrei, aber dieses Problem trat auf, als ich zu VPS wechselte.

Bokistack
quelle
Auch wenn Sie auf die Dummheit von CORS stoßen: Führen Sie sudo a2enmod headersund aus sudo a2enmod rewrite(vergessen Sie nicht, Apache neu zu starten).
RyanNerd
2

Vielen Dank an andere in diesem Thread für ihre Vorschläge. Nach den genannten Schritten stellte ich fest, dass der Apache-Server keinen Syntaxfehler in einer loadDatei in melden konnte /etc/apache2/mods-enabled. Es stellt sich heraus, dass sowohl php7.0 als auch php7.1 aktiviert wurden.

a2dismod php7.0
systemctl restart apache2

und PHP wird wieder korrekt gerendert.

djnz0feh
quelle
1

Wenn das Modul Benutzerverzeichnis aktiviert ist und sich Ihre Site in einem Benutzerverzeichnis (~ / public_html) befindet, müssen Sie /etc/apache2/mods-enabled/php5.conf überprüfen. Der folgende Teil macht es möglich (unter 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
quelle
1

Wenn Sie ein Ubuntu-Benutzer sind, muss Apache nach der Installation den folgenden Befehl in der Neuinstallation ausführen

sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt

In meinem Fall funktioniert gut.

Hasan Baig
quelle
1

Was hat bei mir funktioniert:

Suchen Sie in der aktiven httpd.conf

<IfModule mime_module>
...
</IfModule>

Es fehlte folgendes

AddType application/x-httpd-php .php
AddHandler application/x-httpd-php .php

Nach dem Neustart von Apache werden die PHP-Dateien korrekt analysiert.

paul
quelle
1

Keiner der oben genannten Punkte hat für mich funktioniert oder funktioniert ... PHP7, Apache Httpd 2.2 unter CentOS 6

Tatsache ist, ich habe (alle mit yum) PHP VOR Apache installiert ... Sie müssen das Gegenteil tun: Installieren Sie immer zuerst Apache, dann PHP, und dann funktioniert es ... In der Tat fehlen Sie wahrscheinlich libphp7.soundlibphp7-zts.so in/etc/httpd/modules/

Ich konnte mich trotzdem erholen, ohne PHP zu deinstallieren. Ich habe die magische Linie hinzugefügt in /etc/httpd/conf/httpd.conf: AddType application/x-httpd-php .php Und dann laufen:yum install php php-mysql

berhauz
quelle
1

Für PHP7 und Apache2.4 ist dies alles, was Sie tun müssen:

sudo vim /etc/httpd/conf/httpd.conf

Gehen Sie ganz nach unten und fügen Sie Folgendes ein (ganz von selbst):

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

Apache wird jetzt alles mit PHP ausführen. Wenn Sie nur HTML- und PHP-Dateien haben, funktioniert dies gut für Sie. Wenn Sie andere Arten von Dateien haben, müssen Sie die Datei an Ihre Situation anpassen. Ich habe dies mit phpMyAdmin getestet und es scheint kein Problem zu haben ... bis jetzt.

Nichts von all den anderen Dingen, über die alle Leute hier sprechen, war für mich notwendig. Als ich das "AddType Application ....." -Ding an der richtigen Stelle platzierte, sagte mir Apache nur, dass dieses Modul bereits geladen war und übersprang es.

Weitere Informationen finden Sie hier: https://httpd.apache.org/docs/2.4/mod/core.html#filesmatch

Meine Installation wurde wie folgt durchgeführt:

sudo yum install -y httpd24 php70 mysql56-server php70-mysqlnd

Sie sollten dies auch lesen, wenn Sie nicht: https://httpd.apache.org/docs/current/howto/htaccess.html#when

Adam Winter
quelle
0

Dies passierte mir auch beim Ausführen von $ _POST in MAMP. Alle meine INI- und httpD-Dateien wurden korrekt eingerichtet. Wenn Sie die Formularbearbeitung durchführen und ein HTML-Dokument haben und die Informationen an einen PHP-Formularhandler senden, auf dem $ POST ausgeführt wird, stellen Sie sicher, dass Sie die HTML-Datei von localhost über Ihren Server und nicht nur lokal ausführen.

Dies war eine Verknüpfung, die ich zum Ausführen von HTML-Dokumenten gemacht habe, indem ich einfach auf die HTML-Datei in meinem Verzeichnis geklickt und in meinem Webbrowser gestartet habe. Um in Wirklichkeit zu überprüfen, ob PHP in Ihrem Formular verarbeitet wird, müssen Sie Ihr HTML über Ihre Server ausführen. Ein sehr einfaches Protokoll, das ich übersehen habe.

Beispiel:

Falsch: file:///Applications/MAMP/htdocs/form/form.html

Richtig: http://localhost:your port number/form/form.html

Jetzt sollte das PHP verarbeitet werden, sobald Sie auf die Schaltfläche "Senden" klicken

Maidenastraea
quelle
0

Ich hatte das gleiche Problem, verursacht durch die Debian / Ubuntu-Standardkonfiguration des Moduls suphp. Es enthielt suPHP_Engine offfür ganze / usr / share, was dazu führte, dass die PHP-Quellen im Browser angezeigt wurden. Deaktivieren mit a2dismod suphpwar die Zwischenlösung.

Torsten Knodt
quelle
0

Ich hatte das gleiche Problem. Wenn ich eine PHP-Datei starte, zeigte mir der Webbrowser den PHP-Code, anstatt ihn auszuführen. Ich hatte viele Male versucht: Deinstallieren / Neuinstallieren des wampserver64, Umgehen der PHP / Apache-Einstellungen / Module usw. Nach 2 Tagen: Als ich versuchte, die PHP-Datei im Editor ++ auszuführen, wurde mir klar, dass ich die Standardkombination "Strg +" drückte Alt + Shift + R "für Chrom. Es wurde versucht, meine PHP-Datei wie folgt auszuführen: "Datei /// C: / wamp64 / www / bla / bla .." in der Adressleiste meines Chroms. Das war mein problem Ich habe die Änderungen gemäß Seite Konfigurieren von Notepad ++ für die Ausführung von PHP auf localhost vorgenommen. . Mein Problem wurde gelöst. Aber nach 2 Tagen ..

Mechaniker
quelle
0

Führen Sie Xampp (Apache) als Administrator aus. In Google Chrome Typ:

localhost/<insert folder name here>/<insert file name>

Wenn der von Ihnen erstellte Ordner "LearnPhp" ist, lautet die Datei "kapitel1.php" und geben Sie ein

localhost/LearnPhp/chapter1.php

Ich habe diesen Ordner im Ordner xampp im Ordner htdocs erstellt, der beim Herunterladen von xampp erstellt wird.

Aquasar
quelle
0

Debian 9-Lösung:

touch /etc/apache2/conf-available/php.conf 

Zur Datei hinzufügen Nächste Zeilen:

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

Dann renne:

a2enconf php && service apache2 restart
mrDinkelman
quelle
Das hat bei mir funktioniert, aber zunächst nicht. Ich führe Webinhalte in Benutzerverzeichnissen aus, die standardmäßig deaktiviert sind. Um dies zu ermöglichen, lesen Sie den letzten Abschnitt in/etc/apache2/mods-available/php7.2.conf
Tony Adams
0

Manchmal, wenn Sie PHP-Versionskonflikte haben, passiert es, um dies zu überwinden, folgen Sie bitte den folgenden Schritten

Schritt 1: Yum-Liste installiert | grep 'php'

Wenn Sie mehrere Versionen von PHP wie PHP 5.6 und PHP 7.0 haben, wird dieser Konflikt auftreten

Schritt 2: yum entfernen ** Ihre PHP-Version **

Schritt 3: Starten Sie dann die Apapche /etc/init.d/httpd restartoder neuservice apache2 restart

sachin_ur
quelle
0

Diese Lösung hat bei mir funktioniert. Ich habe apache2 gelöscht und neu installiert. Es geschah nach dem Löschen und Installieren. Wenn es sich um die erste Installation handelt, tritt dieses Problem nicht auf.

Kemal Atik
quelle
0

Ich habe eine Reihe der oben genannten Lösungen ausprobiert, aber die Lösung in unserem Szenario bestand darin, das fpm-Modul zu installieren.

Wir hatten httpd vor PHP installiert, was möglicherweise etwas mit dem Problem zu tun hatte, aber um das Problem zu beheben, haben wir Folgendes installiert:

yum module install php: 7.2

Dadurch wurde das Modul php-fpm-7.2.11-4.module + el8.1.0 + 5443 + bc1aeb77.x86_64.rpm installiert, das wir dann aktiviert haben durch:

systemctl enable --now php-fpm

Ab diesem Zeitpunkt haben wir die Datei /etc/httpd/conf.d/php.conf als Standard beibehalten und httpd neu gestartet

Service httpd Neustart

Dann hat alles geklappt.

Hoffe das hilft, hat viel länger gedauert als es herausfinden musste.

Bren1818
quelle