PHP funktioniert nicht in html
der henry
- apache
Hallo,
ich habe ein für mich neues OS (Debian 13) mit apache2 neu installiert.
Bisher habe ich nur php-scripte genutzt, daher ist mir nicht aufgefallen, das php-code in einer reinen html-seite bei mir nicht läuft.
Ein ...
<?php echo "Tester"; ?>
wird nicht angewendet, sondern als "html-code", ausgegeben .. Dies sehe ich im Feierfox "seitenquelltext ansehen", rot unterstrichen.
PHP-Scripte in der Linuxkonsole zu Testzwecken geht auch ...
Das ist mir völlig rätselhaft, eine fehlendes PHP-Paket kann es doch nicht sein ... ? Ich vermute es fehlt irgend etwas beim apache2 🤔
Danke !!!
Lieber Henry,
php-code in einer reinen html-seite
was'n das?
Liebe Grüße
Felix Riesterer
Lieber Henry,
php-code in einer reinen html-seite
was'n das?
Liebe Grüße
Felix Riesterer
Wenn ich mich richtig erinnere, war das einmal möglich, ja sogar gängige Praxis. ABER ...
Da PHP eine "ausführbare Datei" ist, also eine Datei, die ein Programm (nämlich PHP) startet, braucht es executable-Rechte. Und diese Rechte bekommt normalerweise ein .html nicht.
Und das ist gut so. Sonst könnte man mit HTML großen Quatsch machen. Umgekehrt (also html-code in php-Dateien schreiben) ist es aber anscheinend noch gut möglich, wie ich hier auf php-kurs.info gelesen habe.
Deshalb meine Bitte: nie ein apache-System so verbiegen, dass es in .html-Dateien auch php-Code zulässt.
Liebe Grüße,
Hans
Hallo Hans,
eine *.php Datei zu erstellen, die ausschließlich HTML enthält, ist selbstverständlich nie ein Problem. Der PHP Interpreter schiebt alles stumpf durch, was nicht in <?php ?> eingeschlossen ist (wobei das ?> am Ende einer Datei gerne fehlen darf und sogar fehlen soll, um kein ungeplantes Whitespace zum Browser zu schicken.
Rolf
Da PHP eine "ausführbare Datei" ist, also eine Datei, die ein Programm (nämlich PHP) startet, braucht es executable-Rechte.
Um Himmels willen: Nein! Die brauchst Du nur für PHP-Programme, die Du am Prompt (oder als CGI-Skript) ausführen willst. Dann brachst Du unter Unixoiden (also auch Debian-Linux) aber aber auch eine SHEBANG. (Also #! /usr/bin/php8.4) in der ersten Zeile des Skriptes.
ABER: Als reines CGI-Skript wirst Du PHP aber (auf einem Webserver) tunlichst nicht ausführen wollen (ich will hier kein Buch schreiben, sondern verweise auf das Handbuch) – DAFÜR gibt es das auf echten Servern genutze FPM-Modul oder eben mod_php.
Falls, was bei Dir wohl wohl zutrifft, PHP als Apache-Modul installiert wurde (ein apt list libapache2-mod-php zeigt es an) ist das Standardvorgehen unter Debian 13 das Folgende:
~$ su - ### So wirst Du sicher(!) zum root.
~# a2enmod php8.4 ### Erzeugt zwei symbolische Links
~# systemctl restart apache2 ### Apache wird neu gestartet.
Danach werden Dateien mit der Endung „.php“ augeführt (genau genommen werden diese das nicht, sondern nur das Modul damit „gefüttert“, „ausgeführt“ wird (in diesem Fall) der Apache. Willst Du mehr wissen schau Dir die Dateien php8.4.conf php8.4.load im Ordner /etc/apache2/mods-available bzw. auch nach den Links zu diesen im Ordner /etc/apache2/mods-enable. Der Befehl a2enmod php8.4 erzeugt diese.
Da PHP eine "ausführbare Datei" ist, also eine Datei, die ein Programm (nämlich PHP) startet, braucht es executable-Rechte.
Um Himmels willen: Nein! Die brauchst Du nur für PHP-Programme, die Du am Prompt (oder als CGI-Skript) ausführen willst. Dann brachst Du unter Unixoiden (also auch Debian-Linux) aber aber auch eine SHEBANG. (Also
#! /usr/bin/php8.4) in der ersten Zeile des Skriptes.
Nachtrag:
Und Du musst in den Skripten zwingend selbst einen Content-Header setzen.
Hallo Henry,
man kann den Apache so konfigurieren, dass er HTML Dateien nicht als statische Ressource betrachtet, sondern über den PHP Interpreter laufen lässt.
Schlau ist das nicht unbedingt, denn damit werden auch tatsächlich statische Seiten per PHP behandelt und das kostet unnötig Ressourcen. Was spricht dagegen, die Datei .php zu nennen? Im Zweifelsfall mit einem Rewrite unterstützt?
Generell haben wir das Thema mit Tommy vor einem Vierteljahr durchgekaut - inclusive der typischen Selfhtml-Kapriolen...
Rolf
Hallo,
ich habe mir den Beitrag "PHP innerhalb HTML" gelesen und sehe es jetzt genau so, dass dies keinen Sinn macht bzw. unsinnig ist.
Vielen Dank.
Ich vermute es fehlt irgend etwas beim apache2 🤔
Die Installation habe ich im anderen Beitrag beschrieben. Kommen wir zur Konfiguration.
Ich würde diese Einstellung auf ein oder wenige bestimmte(s) Verzeichnis(e) beschränken, da sonst der Apache alle html-Dateien dem PHP übergibt, das PHP diese parst und in 99% der Fälle dem Webserver einfach nur zurück gibt. Was dazu führt, dass außer dem Aufheizen des Servers und ein paar kurzen Strahlungsgewittern in diesem nichts passiert - aber eben auch, dass der Abruf der reinen HTML-Dateien etwas länger dauert als notwendig und wegen falscher Erwartungen zu einem Sicherheitsproblem ausarten kann. Nach meiner Aufassung „inakzeptabel lange, inakzeptabel riskant“. Darüber kann man sich also „trefflich streiten“ – am Ende behalte ich aber Recht.
Für das Folgende gehe ich von der Originalkonfiguration aus. Ist bei Dir etwas anders, dann musst Du das zeigen oder halt selbst adaptieren
Ich benutze also hierfür das Verzeichnis /var/www/html/test
Einer(!) der vielen(!) Wege ist, in der Datei /etc/apache/sites-enabled/000-default.conf (genauer der verlinkten Datei /etc/apache/sites-available/000-default.conf) dafür zu sorgen, dass Dateien mit der Endung „.html“ als potentielle PHP-Skripte angesehen und also vom Interpreter ausgeführt werden.
Füge dazu folgenden Abschnitt unten an. Am besten mit den Kommentaren:
### Henry war das am 02.01.2026
### s.a. https://forum.selfhtml.org/self/2025/dec/30/php-funktioniert-nicht-in-html/1823518#m1823518
### Dateien mit der Endung ".html" an PHP übergeben:
<Directory "/var/www/html/test">
<FilesMatch ".html$">
SetHandler application/x-httpd-php
</FilesMatch>
</Directory>
Ein anderer Weg wäre, den Abschnitt <FilesMatch …> … </FilesMatch> innerhalb in einer Datei mit dem Namen /var/www/html/test/.htaccess unterzubringen und in /etc/apache/sites-enabled/000-default.conf das AllowOverwrite fü+r den Ordner „/var/www/html/test“ auf einen geeigneten Wert zu setzen. Vergesse nicht, Rechte zu setzen. Der Webserver (agiert als www-data, UID 33, GID 33) muss das lesen können. /Ein anderer Weg
Egal, ob Du jetzt die Original-Konfig benutzt oder die .htaccess:
Du musst dem Server sagen, er soll mal (versuchen) seine Konfiguration neu (zu) laden:
~$ su -
~# systemctl reaload apache2
Achte auf Fehlermeldungen.
Außerdem solltest Du natürlich eine Testdatei (/var/www/html/test/test.html) anlegen und nach dem Test natürlich löschen: (mein Inhalt)
<h1>Es ist jetzt <?=date('H:i:s');?>.</h1>
Alternative, die Du unbedingt löschen solltest:
<?php phpinfo(); ?>
Denke daran, dass der Webserver diese und das Verzeichnis /var/www/html/test lesen können muss: („henry“ sei Dein Benutzername)
~$ su -
~# chown -R henry:henry /var/www/html/test
~# chmod 755 /var/www/html/test
~# chmod 644 /var/www/html/test/test.html
Danach kannst unter http://localhost/test/test.html die aktuelle Uhrzeit (oder relevante PHP-Infos)sehen.
Wenn nicht, poste hier die Fehlermeldung. Falls die als Download kommt, lade sie herunter und öffne diese mit einen Textbetrachter…
Es könnte ja sein, dass eine andere Konfiguration dem widerspricht oder halt falsch ist.