PHP Code nicht rendern bei statischen Seiten

Fragen zum Erstellen von Templates für webEdition.
Benutzeravatar
e-site
webEdition Partner
webEdition Partner
Beiträge: 75
Registriert: Fr 27. Mai 2016, 09:33
Kontaktdaten:

PHP Code nicht rendern bei statischen Seiten

Beitragvon e-site » Mi 23. Feb 2022, 09:49

Hallo zusammen,
wegen der Performance geben wir fast alle Seiten von webEdition statisch aus. Dadurch habe ich aber das Problem, dass z.B. mit php erzeugte Security Headers nur bei dynamisch erzeugten Seiten ausgegeben werden. Ich hätte auch noch weitere Fälle, wo ich hier und da php nutzen muss.
Gibt es keine Möglichkeit beim rendern der Seiten, dass php-Code erhalten bleibt?

Ein Tag wäre super, wo der Code 1 zu 1 in den statischen Seiten ausgegeben wird:

Code: Alles auswählen

<we:donotrender>
<?php header("Content-Security-Policy: default-src 'self' ...."); ?>
</we:donotrender>
<!DOCTYPE HTML>
.....
Oder gibt es dafür schon längst eine Lösung?

Gruß Heiko

e_herrmann
Senior Member
Beiträge: 1319
Registriert: Do 22. Mai 2003, 23:25

Re: PHP Code nicht rendern bei statischen Seiten

Beitragvon e_herrmann » Mi 23. Feb 2022, 12:38

Dafür sollte es mehrere Wege geben.

Du kannst der statischen Seite die Endung .php geben. Das kannst du z.B. auch beim Dokumenttyp festlegen. Dann gilt das eventuell auch nur für ausgewählte Seiten.
Oder du kannst den Server anweisen, die .html mit PHP zu parsen. Sollte über php.ini/htaccess einstellbar sein.
Elko Herrmann
komplexx | internet.fotografie
web: http://www.komplexx.de

Benutzeravatar
e-site
webEdition Partner
webEdition Partner
Beiträge: 75
Registriert: Fr 27. Mai 2016, 09:33
Kontaktdaten:

Re: PHP Code nicht rendern bei statischen Seiten

Beitragvon e-site » Mi 23. Feb 2022, 14:08

Danke für deine Antwort,

wir haben die Seiten generell als .html laufen und parsen. Am parsen der html-Seiten liegt es nicht.
Ich hab das Problem, wenn der Haken bei dynamisch nicht aktiviert ist, webEdition die Seiten ohne php-Code ausgibt bzw. ihn vorher ausführt. Ich will aber, dass webedition bestimmten php-Code nur ausgibt und nicht ausführt beim rendern der .html Seiten.

Gruß Heiko

mokraemer
Senior Member
Beiträge: 3619
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: PHP Code nicht rendern bei statischen Seiten

Beitragvon mokraemer » Mi 23. Feb 2022, 16:01

genau das ist die Idee. Würde darin weiterhin php ausgeführt, hättest du das gleiche Problem.

Ich glaube eher, das du ein anderes Problem hast und du nur einen schlechten Workaround mit der statischen Ausgabe gefunden hast. Zuerst sollte mal das Problem analysiert werden und dann kann man überlegen wie man das behebt - hier kann evtl. auch der we:cache eine Lösung sein - aber trotzdem sollte man erst mal verstehen wo und welches Problem man hat.
Es kann ja auch sein, das die DB der Flaschenhals ist; die braucht es bei statischen Seiten natürlich nicht. Bei langsamen dynamischen Seiten kann entweder PHP oder die DB das Problem sein. Auf DB Seite dann entweder schlechte Abfragen, Überlastung, fehlende Indices.

Die header kannst du grundsätzlich auch über .htaccess Dateien setzen, sofern dein Provider das header-modul (https://httpd.apache.org/docs/current/m ... aders.html) aktiv hat.
webEdition-Kern-Entwickler

Benutzeravatar
e-site
webEdition Partner
webEdition Partner
Beiträge: 75
Registriert: Fr 27. Mai 2016, 09:33
Kontaktdaten:

Re: PHP Code nicht rendern bei statischen Seiten

Beitragvon e-site » Mi 23. Feb 2022, 17:00

Danke für deine Antwort.

Generell erstmal, ein Problem habe ich momentan nicht. Wir sind ein paar Mal wirklich an die Grenzen bei der Datenbank gekommen aber ein Umzug zu einem anderen Server hat hier Abhilfe geschaffen.

Ich würde gern generell mit den statischem Seiten arbeiten. Ich finde die Möglichkeit der vorgerenderten Seiten auch super aber mir fehlt trotzdem noch die Möglichkeit mit zusätzlichem php-Code arbeiten zu können. Es geht mir auch nicht nur um den Header, ich bräuchte es auch für andere Sachen. Wir haben auch ein paar einfache statische per Hand erstellte .html Seiten laufen, dort habe ich ja auch hier und da php drin und genau sowas stelle ich mir vor. Es wäre für mich ein wichtiges Feature, wenn die Ausgabe des php-Codes funktionieren würde.

Hat hier generell jeder die Seiten dynamisch laufen?

Wenn ich den Header in der .htaccess setze, funktioniert webEdition nicht mehr. Ich habe das schon alles durchgetestet, auch mit einem Meta-Tag, will aber bei der php-Lösung bleiben und wie schon erwähnt bräuchte ich es auch für andere Sachen.

Ich habe es gerade noch getestet: die Auslieferung der Seite halbiert sich fast, wenn ich die Seite nicht dynamisch ausgebe und das finde ich für die Performance schon relevant.

Gibt es denn jetzt irgendwie die Möglichkeit, doch noch statische Seiten mit php Schnipseln auszugeben?
Kann ich da was in webEdition anpassen? Irgendeine Lösung? Vielleicht mit einem eigenen webEdition-Tag?


Gruß Heiko

ThomasGoebe

Re: PHP Code nicht rendern bei statischen Seiten

Beitragvon ThomasGoebe » Mi 23. Feb 2022, 18:24

e-site hat geschrieben: Mi 23. Feb 2022, 17:00 Ich würde gern generell mit den statischem Seiten arbeiten.
Warum?
e-site hat geschrieben: Mi 23. Feb 2022, 17:00 Hat hier generell jeder die Seiten dynamisch laufen?
Ich vermute, die meisten. Ich auf jeden Fall bei allem und in manchen Spezialfällen arbeite ich mit eigenen Cachesystem.

mokraemer
Senior Member
Beiträge: 3619
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: PHP Code nicht rendern bei statischen Seiten

Beitragvon mokraemer » Mi 23. Feb 2022, 22:06

Wenn ich den Header in der .htaccess setze, funktioniert webEdition nicht mehr.
Ich denke du wirst hier vorher ein

Code: Alles auswählen

<Files ~ "\.(htm|html)$">
...
</Files>
setzen müssen. Es ist nicht ratsam ein Header über alles zu bügeln. Ggf. muß man das auch noch auf den Pfad einschränken - aber htm/html Dateien sind in WE nicht enthalten, wenn du es also darauf abrichtest, sehe ich keinen Grund warum es nicht geht (es sei denn du hast einen Fehler und der Apache liefert aufgrund der fehlerhaften htaccess 500 zurück).
Ich habe es gerade noch getestet: die Auslieferung der Seite halbiert sich fast, wenn ich die Seite nicht dynamisch ausgebe und das finde ich für die Performance schon relevant.
Und wo glaubst du, kommt der Unterschied her? Daher, das kein PHP-Interpreter gestartet werden muß, der dann wiederum den Kode liest und parst. Je nachdem wie php angebunden ist als Apache-Modul (alt), als CGI (eher alt) oder per FPM (aktuelle Technik), vergeht der Hauptteil der Zeit im Starten des PHP-Interpreters. Nur wenn der als eigenständiger Prozess vorgehalten wird, und dann auch der php-opcache zum Einsatz kommt, können Frameworks (wie webEdition) recht Effizient laufen. Trotzdem muß der Request vom Apache Prozess noch zu FPM und wieder zurück und all das kostet Zeit. Die einzige Möglichkeit da noch ein bißchen was dynamisch zu machen, ohne die Funktionilität zu verlieren sind SSI (https://httpd.apache.org/docs/2.4/de/howto/ssi.html).

Du kannst ja die statischen Seiten als .php speichern. Alles was darin noch steht, wird auch ausgeführt - dann siehst du ja, wie sich die Zeiten ändern. Kann man einfach per

Code: Alles auswählen

<?php
$tmp=<<<XXXX
<?php
header(...);
?>
XXXX;
echo $tmp;
?>
testen. Du siehst, machen kannst du das jetzt schon. Ich vermute das dann die Ausführungszeit ca. 80% von der von dynamischen WE ist, denn natürlich wird bei WE ein bißchen mehr gemacht als nur ein Interpreter gestartet. Aber denk dran - da ist plain php - da gibt es keine we-Tags, we-Funktionen, we-Initialisierungen - das ist wirklich das, was der Hoster liefert.
webEdition-Kern-Entwickler

Benutzeravatar
e-site
webEdition Partner
webEdition Partner
Beiträge: 75
Registriert: Fr 27. Mai 2016, 09:33
Kontaktdaten:

Re: PHP Code nicht rendern bei statischen Seiten

Beitragvon e-site » Do 24. Feb 2022, 13:31

Danke für eure Antworten,

@ThomasGoebe: In erster Linie, will ich eine Entlastung und schnellere Auslieferung erreichen. Es muss nicht jedes Mal pro Seitenaufruf alles aus der Datenbank kommen, da die Seiten schon vorgerendert sind. Und ich merke wirklich schnellere TTFB Zeiten, auch mit zusätzlichem php-Code in statischen .html Seiten.
Ich hab mir die von webEdition erzeugte statische Seite heruntergeladen und zusätzlich mit php befüllt. Im Vergleich zur dynamischen Varinate habe ich trotzdem geringere TTFB Zeiten, fast schon halbiert.

@mokraemer: Der Weg über die .htaccess ist für mich keine Option, hier kann ich auch nicht mit nonce oder sha256 Werten arbeiten.
Aber können wir das Thema Security Headers fallen lassen, da ich die Option php in den statischen Seiten zu verwenden auch für andere Anwendungen bräuchte? Die Ausführungszeiten für das rendern werden, wie du geschrieben hast, nicht so sehr ins Gewicht fallen. Aber ich merke es an den TTFB-Zeiten. Wie ich oben geschrieben habe, merke ich mit statischen Seiten und darin eingesetztem php geringere TTFB Zeiten als mit der dynamischen Variante.

Ich will euch deswegen wirklich nicht stressen :oops:
Wie ich schon geschrieben habe, würde ich es als Feature sehen und mir sehr entgegen kommen, wenn es mit dem php-Code in den statischen Seiten möglich wäre. Aber es sieht so aus, dass ich doch wieder komplett zurück zum "dynamisch" Haken kehren werde.

Gruß Heiko

mokraemer
Senior Member
Beiträge: 3619
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: PHP Code nicht rendern bei statischen Seiten

Beitragvon mokraemer » Do 24. Feb 2022, 16:28

deine ttfb Zeiten kannst du ja auch in php beeinflussen. letztlich ist ttfb egal und oft auch hinderlich, da hierdurch auch ein Rerendering der Seite stattfinden kann.
Ich hab dir ja ne mögliche Lösung gegeben. Probier's aus - ich denke das dies Unsinn ist
webEdition-Kern-Entwickler

manuel
Member
Beiträge: 30
Registriert: Do 9. Jan 2020, 16:17

Re: PHP Code nicht rendern bei statischen Seiten

Beitragvon manuel » Mi 2. Mär 2022, 14:37

Hallo Heiko,

bei uns laufen ein paar Seiten, die aufgrund von Listviews über Artikel auch zu langsam rendern. Generell sollen aber auch diese Seiten weiterhin dynamisch generiert sein. Hier nutzen wir den Trick und teilen die Seite in mehrere Inhaltsbereiche auf. Für die (langsame) Listview (in der "Standard"-Ansicht mit Links und Anlesetexten zu den neuesten 20 Artikeln) erzeugen wir erstmal eine statische Ansicht in Form einer HTML-Datei (nur den HTML-Code der Liste, kein Layout).

Die eigentliche PHP-Seite wird dann wie immer dynamisch erzeugt, also Navi usw., Headerbild, Headline und Einleitung werden wie üblich mit dynamisch generierten Inhaltsblöcken ausgegeben. Nur die Listview wird dann nicht dynamisch zur Laufzeit generiert, sondern wir binden die statische HTML-Seite ein. Damit ist die Seite sehr schnell (114 ms) erzeugt, statt 1800 ms. Natürlich muss die statische HTML-Seite neu geschrieben werden, wenn ein neuer Artikel hinzukommt. Da muss der Redakteur drauf achten.

In Deinem Fall könntest Du die Inhalte in statische HTML-Seiten auslagern und diese dann in dynamischen PHP-Seiten einbinden, die zur Laufzeit gerendert werden und den PHP-Code ausführen.

NilSole
Senior Member
Beiträge: 303
Registriert: Mi 27. Mär 2019, 15:28

Re: PHP Code nicht rendern bei statischen Seiten

Beitragvon NilSole » Mi 2. Mär 2022, 19:48

Hallo Manuel,

das klingt so, als könntest du deinem Redakteur mit dem neuen Tag we:cache (ab 9.0.0, ganz neu auch mit DB-Cache) unter die Arme greifen. 1800ms sind aber auch schon arg lang, sicher, dass die Abfragen nicht irgendwo ineffizient sind?

https://www.webedition.org/de/dokumenta ... renz/cache

manuel
Member
Beiträge: 30
Registriert: Do 9. Jan 2020, 16:17

Re: PHP Code nicht rendern bei statischen Seiten

Beitragvon manuel » Do 10. Mär 2022, 11:07

Hallo Nils,

ich muss we:cache endlich mal ausprobieren, das steht weit oben auf meiner Liste. Ich habe allerdings erst letzte Woche das Upgrade auf WE 9 gemacht. Bisher sind wir mit der o.g. Methode aber ganz gut gefahren, die 114 ms sind halt wirklich irre schnell - ich bin gespannt, ob das mit dem Cache auch so gut läuft.

mokraemer
Senior Member
Beiträge: 3619
Registriert: So 8. Aug 2010, 01:23
Wohnort: Mainz

Re: PHP Code nicht rendern bei statischen Seiten

Beitragvon mokraemer » Do 10. Mär 2022, 16:04

die Spannung kann ich dir nehmen - das Starten von php, der Aufbau zu DB - all das braucht Zeit. So schnell wird das nicht gehen.
webEdition-Kern-Entwickler


Zurück zu „webEdition Templates erstellen (we:Tags)“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste