PHP-Code wird nicht ausgeführt, stattdessen wird Code auf der Seite angezeigt


318

Ich versuche, PHP-Code in einem Projekt auszuführen (mit Dreamweaver), aber der Code wird nicht ausgeführt.

Wenn ich den Quellcode überprüfe, wird der PHP-Code als HTML-Tags angezeigt (ich kann ihn im Quellcode sehen). Apache läuft ordnungsgemäß (ich arbeite mit XAMPP), die PHP-Seiten werden ordnungsgemäß geöffnet, aber der PHP-Code wird nicht ausgeführt.

Hat jemand einen Vorschlag, was passiert?

Hinweis: Die Datei hat bereits den Namenfilename.php

Bearbeiten: Der Code ..:

<?
include_once("/code/configs.php");
?>

Der Druck


44
Verwenden Sie kurze Tags <?anstelle von <?php?
Dan Grossman

28
Verwenden Sie NIEMALS kurze Tags. ( <?). Sie sind veraltet, arbeiten nicht wirklich an vielen Orten und sind ansonsten völlig unnötig. Das Speichern von drei Tastenanschlägen ist kein gültiger Grund dafür, dass Ihr Code möglicherweise auf wahrscheinlich der Hälfte der Server ausfällt, auf denen er möglicherweise ausgeführt wird.
Mopsyd

10
@mopsyd Wo steht, dass kurze Tags veraltet sind? Bitte beachten Sie, dass kurze Tags nicht mit kurzen Echo-Tags identisch sind und kurze Echo-Tags seit PHP 5.4 unabhängig von der short_open_tagEinstellung standardmäßig unterstützt werden .
Kyle Anderson

5
Mir ist bewusst, dass kurze Tags keine kurzen Echo-Tags sind, weshalb ich angegeben habe, worüber ich im Kommentar gesprochen habe. Zum Zeitpunkt des Schreibens wurden kurze Tags für die Veröffentlichung von PHP 6 als veraltet markiert, obwohl sich dies anscheinend seitdem geändert hat. Das Problem besteht immer noch darin, dass viele Server sie deaktiviert haben, wodurch Ihr Code erheblich weniger portabel ist. Dies gilt nicht für kurze Echo-Tags ( <?=), die unter PHP 5.4+ unabhängig von den Servereinstellungen einwandfrei funktionieren sollten.
Mopsyd

3
albernes Gerede über kurze Tags. Lange Tags saugen und sie sind hässlich. Ich hatte in 10 Jahren PHP-Programmierung noch nie ein Problem. Sie sind fast nie das Problem
Danial

Antworten:


416

Klingt so, als ob etwas mit Ihrer Konfiguration nicht stimmt. Hier sind einige Dinge, die Sie überprüfen können:

  1. Stellen Sie sicher, dass PHP installiert ist und ordnungsgemäß ausgeführt wird. Das mag albern klingen, aber man weiß es nie. Eine einfache Möglichkeit zur Überprüfung besteht darin, php -vüber eine Befehlszeile zu prüfen, ob Versionsinformationen oder Fehler zurückgegeben werden.

  2. Stellen Sie sicher, dass das PHP-Modul in der httpd.conf Ihres Apache aufgelistet und nicht kommentiert ist. Dies sollte so etwas wie LoadModule php5_module "c:/php/php5apache2_2.dll"in der Datei sein. Suchen Sie nach LoadModule phpund stellen Sie sicher, dass kein Kommentar ( ;) davor steht.

  3. Stellen Sie sicher, dass die httpd.conf-Datei von Apache den Typ PHP MIME enthält. Das sollte so etwas sein AddType application/x-httpd-php .php. Dies weist Apache an, .phpDateien als PHP auszuführen . Suchen Sie nach AddType und stellen Sie sicher, dass ein Eintrag für PHP vorhanden und nicht kommentiert ist .

  4. .phpStellen Sie sicher, dass Ihre Datei die Erweiterung enthält oder die in der MIME-Definition in Punkt 3 angegebene Erweiterung, da sie sonst nicht als PHP ausgeführt wird.

  5. Stellen Sie sicher, dass Sie keine kurzen Tags in der PHP-Datei ( <?) verwenden. Diese sind standardmäßig nicht auf allen Servern aktiviert und von ihrer Verwendung wird abgeraten. Verwenden Sie <?phpstattdessen (oder aktivieren Sie kurze Tags in Ihrer php.ini mit, short_open_tag=Onwenn Sie Code haben, der auf ihnen basiert ).

  6. Stellen Sie sicher, dass Sie über Ihren Webserver auf Ihre Datei zugreifen, indem Sie eine URL verwenden, die http://localhost/file.phpnicht über den lokalen Dateizugriff erfolgtfile://localhost/www/file.php

Zuletzt finden Sie im PHP-Handbuch weitere Tipps zur Einrichtung .


14
Ich weiß nicht warum, aber das Installationsprogramm von PHP 5.3.15 fügt die Zeile nicht hinzu AddType application/x-httpd-php .php. Vielen Dank!!
MatuDuke

7
@shmeeps: Wo hast du gesehen, dass kurze Tags veraltet sind? Ich habe einige Suchen durchgeführt und kann nur Empfehlungen gegen sie finden, nichts über Verachtung. Zugegeben für Anwendungen, die verteilt werden sollen, ist es besser, <? Php zu verwenden, falls der Hosting-Server sie nicht aktiviert hat, aber für Apps, bei denen Sie die volle Kontrolle über den Server haben, werden sie nicht verwendet sehe einen Grund, sie nicht zu benutzen.
ClarkeyBoy

3
Punkt Nr. 6 hat bei mir funktioniert. Der lokale Zugriff verwendet nicht den Apache-Server
KawaiKx

6
Punkt 2 funktionierte für mich auf sichere Weise -apt-get purge apache2; apt-get install apache2 libapache-mod-php5
ulkas

1
@full_prog_full Versuchen Sie, eine Datei mit einer .phpErweiterung mit dem Inhalt hochzuladen, und prüfen Sie, <?php echo("Success"); ?>ob der Zugriff auf die Datei über einen Webbrowser dazu führt, dass "Erfolg" ohne den zugehörigen PHP-Code angezeigt wird.
Shmeeps

61

php7:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 restart

24
Während dieses Code-Snippet die Frage lösen kann, einschließlich einer Erklärung, wie und warum dies das Problem löst, würde dies wirklich dazu beitragen , die Qualität Ihres Beitrags zu verbessern. Denken Sie daran, dass Sie in Zukunft die Frage für die Leser beantworten, nicht nur für die Person, die jetzt fragt! Bitte bearbeiten Sie Ihre Antwort, um eine Erklärung hinzuzufügen, und geben Sie an, welche Einschränkungen und Annahmen gelten.
Toby Speight

4
Diese Antwort bezieht sich auf Linux. Der TopicStarter verwendet eindeutig Windows.
Raymond Nijland

3
@RaymondNijland stimmt, aber das ist kanonisch und ich habe diese Frage gefunden und sie hat mich nach über einer Stunde Fehlerbehebung gerettet.
Gans

Wie und warum: Dies geschieht, wenn PHP7 den Standard-Fast-CGI-Dienst im make-Skript nicht konfiguriert. sudo a2enmod proxy_fcgi setenvifschafft drei neue Mods /mods-available/proxy.conf proxy_fcgi.load proxy.loadEbenso sudo a2enconf php7.0-fpmerstellt eine Konfigurationsdatei /conf-available/php7.0-fpm.confSobald dies geschehen ist und Apache2 kann dann das PHP7 Modul als schnell CGI - Dienst ausführen.
Talvi Watia

33

Ich verwende Apache unter Ubuntu und mein Problem war, dass der /etc/apache2/mods-available/php5.confDatei Folgendes fehlte:

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Ich habe es wieder hinzugefügt und PHP hat PHP-Dateien korrekt analysiert.


31

Hinweis für PHP 7-Benutzer, fügen Sie dies zu Ihrer httpd.conf-Datei hinzu:

# PHP 7 specific configuration
<IfModule php7_module>
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    <IfModule dir_module>
        DirectoryIndex index.html index.php
    </IfModule>
</IfModule>

4
Nur um anderen Menschen bei diesem Problem zu helfen. Die httpd.confDatei befindet sich in /etc/apache2/httpd.confWenn Sie Ubuntu verwenden, befindet sie sich apache2.confin demselben Verzeichnis, das für PHP7 geändert werden muss.
Ahmed Sagarwala

23

Ich habe ein anderes Problem gefunden, das dieses Problem verursacht hat, und es bereits gelöst. Ich habe mein Skript versehentlich in UTF-16Codierung gespeichert . Es scheint, dass PHP5 das <?phpTag in der 16-Bit-Codierung standardmäßig nicht erkennen kann .


18

Ich poste diese Antwort, weil meine Virtualmin / Webmin-Administrationsoberfläche entschieden hat, dass es eine gute Idee ist, meine PHP-Engine zu deaktivieren. Ich habe eine Weile gebraucht, um die Lösung zu finden, also dachte ich, ich würde sie mit euch teilen:

Stellen Sie außerdem sicher, dass in keiner Ihrer Website-Konfigurationsdateien, die sich auf diesen bestimmten Host oder virtuellen Host beziehen, php_admin_value enthalten sind, die PHP wie folgt deaktivieren:

php_admin_value engine Off

Wenn Sie Zweifel haben, kommentieren Sie es ...

# php_admin_value engine Off

Und starten Sie Ihren Webserver neu.


1
Wo genau sind diese Konfigurationseinstellungen?
Cronoklee

2
@cronoklee In den vHost-Einstellungen von httpd.conf. Für vorhandene Hosts müssen Sie die Apache-Konfiguration in webmin bearbeiten. Für zukünftige Hosts gehen Sie zu virtualmin> Servervorlage> Apache-Website. In beiden Fällen ist dies nicht so sicher wie fastcgi - die Standardeinstellung von virtualmin. Der richtige Ansatz sollte daher darin bestehen, Fehler zu beheben, warum fcgi nicht funktioniert. Dies kann beispielsweise durch Dateiberechtigungen verursacht werden.
Sheepy

Wenn Sie eine Version von Apache verwenden, die keine httpd.conf hat, schauen Sie in /etc/apache2/mods-enabled/php7.confoderphp5.conf
Sam Malayek

Wenn Sie Zweifel an der Position einer bestimmten Konfigurationseinstellung haben, können Sie jederzeit grep verwenden, um das Gesuchte zu finden, indem Sie (zum Beispiel in diesem Fall) Folgendes eingeben:sudo grep php_admin_value /etc/* -R
Henry van Megen

16

Sie öffnen nur Ihre PHP-Datei im Browser. Sie müssen es mit der localhost-URL öffnen. Wenn Sie eine Datei direkt aus Ihrem Verzeichnis öffnen, wird der PHP-Code in keinem Fall ausgeführt.

benutze: http://locahost/index.phpoderhttp:127.0.0.1/index.php

Aktivieren Sie den PHP-Funktionscode. In Ihrem Fall verwenden Sie <?den PHP-Funktionscode für <?php. Standardmäßig sind PHP-Funktionscodes deaktiviert.

Verwenden Sie auch: sudo apt-get install php5 libapache2-mod-php5 php5-mcryptWenn Sie ein Ubuntu-Benutzer sind.


1
Warum ist mcrypt erforderlich, wenn ich nur eine Datei einbinde? Sie sollten beachten, dass diese Frage alt ist und das Problem mit kurzen Tags 16 Mal erwähnt wurde, auch im oberen Kommentar meiner Frage.
Gui

1
Ich teile nur meine Lösung, ich hatte auch den gleichen Fehler und nach dem Ausführen dieses Befehls von mcrypt wurde mein Problem behoben. Sie können es auch versuchen.
Hasan Baig

Standardmäßig sind PHP-Funktionscodes aktiviert. short_open_tag = On (Standardwert = ON) in PHP 5.6
Zond

Dies war mein Problem, meine Virtualmin / Apache-Konfiguration war für 127.0.0.2, aber ich habe meine externe IP-Adresse in den Browser eingegeben. Ich habe gerade meine v / a-Konfiguration aktualisiert und jetzt funktioniert sie
Hayden Thring

Mir fehlte nur die libapache2-mod-php7.3.
Dxvargas

8

Ich weiß, es sollte albern klingen ... aber selten passiert es.

Überprüfen Sie, ob Sie versuchen, PHP von auszuführen

**http://localhost/info.php**

und nicht von

file:///var/www/info.php

ps> das merkt man wenn man aus der shell schreibt

php info.php 

es antwortet mit dem Code (es bedeutet PHP-Funktionen) ..


PHP funktioniert einwandfrei (über die Befehlszeile überprüft). Wenn ich jedoch über eine URL auf die Datei zugreife, wird PHP-Code angezeigt.
Muaaz

8

Dies ist mir gerade wieder passiert, zusammen mit dem Server, der HTML-Dateien herunterlädt, anstatt sie zu verarbeiten. Ich hatte den Webserver-Apache einige Zeit nicht auf dem Computer verwendet und währenddessen wurde Ubuntu wie zwei weitere Versionen von ursprünglich installiertem LTS aktualisiert. Jetzt ist es

$ cat /etc/issue
Ubuntu 16.04 LTS

Also hat der PHP danach so funktioniert:

$ sudo apt-get install lamp-server^
$ sudo a2enmod php7.0
$ sudo service apache2 restart 

Der Webserver analysierte jetzt das PHP. Vielleicht müssen jetzt einige Webseiten aktualisiert werden, da php7.0 jetzt dort läuft, wo es war, bevor php5 ausgeführt wurde. Naja.


5

Ich habe dieses Problem gelöst, indem ich XAMPP deinstalliert und WAMP installiert habe. Danke für die Hilfe.


Ich bin xampp, aber es funktioniert gut. Haben Sie herausgefunden, warum der PHP-Code @Gui
Pie am

5

Ich war mit diesem Problem in PHP 7.1 konfrontiert, das mit High Sierra (OS X 10.13.5) geliefert wurde. Die Bearbeitung /etc/apache2/httpd.confmit folgenden Änderungen hat geholfen:

  1. Kommentieren Sie diese Zeile aus

    LoadModule php7_module libexec/apache2/libphp7.so
  2. Fügen Sie am Ende Folgendes ein

    <IfModule php7_module>
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    
        <IfModule dir_module>
            DirectoryIndex index.html index.php
        </IfModule>
    </IfModule>

Wie gleich können Sie bitte vorschlagen, Wamp 3 Version gleichen Fehler. Es gibt keinen /etc/apache2/httpd.conf Ordnerpfad in Wamp 3. @AamirR
Gem

Das hat bei mir funktioniert !!! Meins war ein seltsameres Problem. Einige Dateien haben das PHP gerendert, andere nicht und haben nur den Code angezeigt.
sjw0525

4

auf meinem ubuntu 14.04, apache 2.4, php 5.5.9 install habe ich es mit einer sample.php auf / var / www / html (standard document root) versucht und es hat ok funktioniert. Das Problem lag also in meiner Konfiguration für virtuelle Server. Die Lösung bestand darin, in das Verzeichnis def, das die .php enthält, folgende Zeile aufzunehmen:

    php_admin_flag engine on

und wo soll ich diese Zeile in die Apache-Datei in httpd.conf meines virtuellen Servers einfügen? und ich benutze Webmin
suresh Pareek

3

Ich hatte ein ähnliches Problem, aber in meinem Fall war die Lösung anders. meine Datei , dass angehaltener PHP - Code genannt wurde „somename.html“ geändert , es zu „somename.php“ funktionieren gut


Das hat es auch für mich gelöst. Weiß jemand, ob der Server PHP in einer HTML-Datei ausführt oder muss das Dateiende immer in .php geändert werden, wenn eine PHP-Zeile ausgeführt werden soll?
full_prog_full

hängt von den Servereinstellungen ab. In den meisten Fällen wird der in anyfile.html vorhandene PHP-Code ausgeführt. und wenn nicht, kann es geändert werden, obwohl idk wie: P
Netrus

3

Für eine neue Einrichtung von LAMP unter PHP 7 bearbeiten Sie die Datei /etc/httpd/conf/httpd.conf. Hinweis: Stellen Sie sicher, dass Sie ein Backup dafür erstellen, bevor Sie Änderungen vornehmen.

Fügen Sie dies ganz unten in die Datei ein:

<IfModule php7_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

Suchen Sie dann nach LoadModule und fügen Sie die folgende Zeile ein:

LoadModule php7_module modules/libphp7.so

Diese Zeile fordert einfach httpd auf, das PHP 7-Modul zu laden

Starten Sie dann httpd neu


3

Überprüfen Sie alle Pakete, die Sie für PHP installiert haben, mit:

yum list installed | grep remi

Installieren Sie alle relevanten PHP- Pakete, insbesondere PHP-Entwickler, auf Ihrem Computer.


3

Stellen Sie sicher, dass das Skript enthält

<?php

vor dem Code, der ausgeführt werden soll. Es sollte kein Leerzeichen zwischen <?und phpin diesem sein.


2

Dies war in meinem .htaccess

DirectoryIndex index.html index.htm

index.html enthielt PHP-Code. Standardmäßig verarbeitet PHP keine Dateien mit Erweiterungen wie htm * als PHP-Code.

Sie können dies überschreiben, indem Sie .htaccess Folgendes hinzufügen:

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

1

Ich denke, das Problem, dass es Code anstelle des Ergebnisses anzeigt, ist, dass es nicht zum lokalen Host geht. Überprüfen Sie erneut, welche Adresse Sie eingeben. Gehen Sie zu einem lokalen Dateiverzeichnis oder zum lokalen Host.

Von dem Screenshot, den du gesendet hast, wird dein Computer nicht an den lokalen Host gesendet.

"file: ///" sollte "localhost /" sein


1

Die Neuinstallation des mcryptModuls hat bei mir funktioniert.

$sudo apt-get install php5-mcrypt
$sudo php5enmod mcrypt

Ehrlich gesagt, vielleicht weil ich das PHP auf meinem System nicht richtig konfiguriert hatte. Da die Frage, die ich zu demselben Problem gestellt habe, als Duplikat dieser Frage markiert wurde, konnte ich sie nur hier beantworten. Ich frage mich, warum die Abstimmung.
bg

Diese Antwort bezieht sich auf Linux. Der Topicstarter verwendet eindeutig Windows
Raymond Nijland,

1

Ich hatte den Fall, dass ich versehentlich angefangen habe, mein Dateiverzeichnis im Stammverzeichnis zu entpacken. Es fügte die .htaccess-Datei aus meinem Dateiordner hinzu, die alle PHP blockieren würde

# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
  php_flag engine off
</IfModule>

Fazit: Überprüfen Sie die .htaccess-Datei im Stammverzeichnis.


1

Wenn Sie eine Konfiguration wie diese haben:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/var/www/example.com"

    <FilesMatch "\.php$">
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>

Kommentieren Sie die nächsten Zeilen in Ihrer httpd.conf aus

LoadModule proxy_module lib/httpd/modules/mod_proxy.so
LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so

Für mich geht das


1

Fügen Sie AddType application/x-httpd-php .phpIhrer httpd.conf-Datei hinzu, wenn Sie Apache 2.4 verwenden


1

Ich habe nur stundenlang versucht, PHP 5 mit Apache 2.4 unter Windows 10 zum Laufen zu bringen . Schließlich war es für mich ein Tippfehler in httpd.conf LoadModule . Die Aufmerksamkeit auf das Schreiben und den genauen Modulpfad durch die letzte Antwort in diesem apachelounge-Thread von denny2018 gelenkt . Vielen Dank!

Nach zwei Nächten entdeckte ich ... Mein Verzeichnis wurde geschrieben c:(Kleinbuchstaben)

Ich hatte LoadModule php5_module "c:/php/php5apache2.dll"aber richtig für Apache 2.4 ist:

LoadModule php5_module "C:/php/php5apache2_4.dll"

Also habe ich auch das _4vorher verpasst (für Apache 2.4 ). Das vollständige Snippet, das für mich funktioniert hat:

# PHP
LoadModule php5_module "C:/php/php5apache2_4.dll"
AddHandler application/x-httpd-php .php
<FilesMatch \.php$>
    SetHandler application/x-httpd-php
</FilesMatch>

Habe gerade PHP 7 ausprobiert . Dort lautet die LoadModuleZeile in httpd.conf für Apache 2.4

LoadModule php7_module "C:/php/php7apache2_4.dll"

Derzeit zeigt c:/php/php5apache2.dll das PHP-Handbuch, was natürlich angepasst werden muss.


1

in meinem Fall (Apache / 2.4.34),

nach dem Auskommentieren des spezifischen Moduls

"LoadModule php7_module libexec / apache2 / libphp7.so"

von

"/etc/apache2/httpd.conf"

Mein Problem war weg.


1

Falls wir uns auf derselben Seite befinden, gehen Sie wie folgt vor

sudo apt-get install php -y sudo apt-get install php-{bcmath,bz2,intl,gd,mbstring,mysql,zip,fpm} -y

So aktivieren Sie PHP 7.2 FPM in Apache2:

a2enmod proxy_fcgi setenvif

a2enconf php7.2-fpm

Update 2: Apache lädt die .php-Datei herunter, anstatt sie zu rendern

Danach stand ich vor dem obigen Problem. Es gibt ähnliche Fragen wie diese .

Ich weiß nicht warum, aber es ist nur für meine .php-Dateien im /var/www/html/Stammordner passiert . Für Unterverzeichnisse war alles in Ordnung. (Zum Beispiel WordPress und PHpmyadmin funktionierten gut)

Hier ist meine Lösung. Ich entschied mich, PHP-Modul zu aktivieren. Also habe ich diesen Befehl ausgeführt:

a2enmod php7.2

aber ich habe diese Fehler bekommen:

Berücksichtigung der Abhängigkeit mpm_prefork für php7.2: Berücksichtigung des Konflikts mpm_event für mpm_prefork: FEHLER: Modul mpm_event ist aktiviert - kann aufgrund von Konflikten nicht fortgesetzt werden. Es muss zuerst deaktiviert werden! Berücksichtigung des Konflikts mpm_worker für mpm_prefork: FEHLER: Die Abhängigkeit mpm_prefork für php7.2 konnte nicht aktiviert werden

Deshalb habe ich beschlossen, mpm durch Ausführen der folgenden Befehle zu deaktivieren:

sudo a2dismod mpm_prefork
sudo a2dismod mpm_worker
sudo a2dismod mpm_event

Starten Sie dann Apache neu:

systemctl restart apache2

dann aktiviere php7.2 (meine installierte version):

sudo a2enmod php7.2

und im Moment funktioniert alles gut.


0

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 in Ihrem Basisordner befindet und Sie versuchen, von dort aus darauf zuzugreifenhttp://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

Die Datei, die Sie in / var / www / html / ablegen, sollte .php haben, zum Beispiel example.php. Wenn es sich um ein Beispiel handelt, funktioniert es nicht, aber wenn Sie es in example.php ändern, funktioniert es.

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.