[php] Text mit Variable einbinden
ebody
- php
0 dedlfix0 Tabellenkalk0 dedlfix
0 Linuchs
Hallo
ich habe eine Datei "text.txt" mit folgendem Inhalt:
"Das ist ein Test: $var"
In einer PHP Datei binde ich "text.txt" per include ein und setze vorher die Variable $var.
$var = "hallo welt!";
include "test.txt";
Die Variable $var wird im Text nicht ersetzt und wird als String ausgegeben. Ich habe schon verschiedene Varianten ausprobiert, hat aber leider keine funktioniert:
Hat jemand einen Tipp?
Gruß ebody
Tach!
In einer PHP Datei binde ich "text.txt" per include ein und setze vorher die Variable $var.
Für include und Co. beginnt die einzuladende Seite im Nicht-PHP-Modus.
ich habe eine Datei "text.txt" mit folgendem Inhalt:
"Das ist ein Test: $var"
Das wird nicht als PHP-Code erkannt, weil da kein <?php voranging. Ein echo oder ähnliches (oder <?=) fehlt auch. Sonst ist das nur ein einsam in der Gegend stehendes Stringliteral.
dedlfix.
Hallo,
Das wird nicht als PHP-Code erkannt, weil da kein <?php voranging.
Je nach Konfiguration wäre es auch sinnvoll, die Datei „Text.php“ zu nennen.
Gruß
Kalk
Tach!
Das wird nicht als PHP-Code erkannt, weil da kein <?php voranging.
Je nach Konfiguration wäre es auch sinnvoll, die Datei „Text.php“ zu nennen.
Also, nicht für include. Aber andere Gründe können relevant sein. Liegt diese Datei innerhalb des DocumentRoot, kann man sie üblicherweise per Request aufrufen. Wenn sie dann .txt heißt, wird sie im Original ausgeliefert und kann unter Umständen Code offenbaren. Wenn sie auf .php endet, lässt sie der Apache ausführen und liefert ihr Ergebnis aus. Sie sollte also so aufgebaut sein, dass beim separaten Ausführen kein wichtiger Code gestartet wird. Am besten ist es jedoch, solche nicht direkt auszuliefernden Dateien abseits des DocumentRoot zu lagern. Ob und wie das geht, hängt von den Gegebenheiten beim Hoster ab.
dedlfix.
ich würde das sinngemäß so lösen (nicht getestet):
$var = 5 +2;
echo str_replace ( '$var', $var, file_get_contents( "text.txt" ));
Die vier Zeichen $var der Textdatei werden ersetzt durch den Wert in der Variablen $var.
Sicherheitshalber die einfachen Gänsefüße benutzen, sonst interpretiert PHP das doch noch als Variable. text.txt ist dann schon eine kleine Template-Datei.
Linuchs
Tach!
ich würde das sinngemäß so lösen (nicht getestet):
$var = 5 +2; echo str_replace ( '$var', $var, file_get_contents( "text.txt" ));
So will man das nicht haben, weil dann jede Variable eine Extrawurst braucht.
Man kann ruhig PHPs eingebaute Template-Fähigkeiten verwenden.
Das ist ein Test: <?=htmlspecialchars($var)?>
Somit wird auch gleich noch der Kontextwechsel beachtet. Vorausgesetzt, $var enthält nur Daten und keinen HTML-Code.
Sicherheitshalber die einfachen Gänsefüße benutzen, sonst interpretiert PHP das doch noch als Variable. text.txt ist dann schon eine kleine Template-Datei.
Das ist nicht nur ein (sinngemäßes) "eventuell", sondern garantiertes Verhalten, dass bei doppelten Anführungszeichen das $var nicht literal stehen bleibt.
dedlfix.
@@dedlfix
Das ist ein Test: <?=htmlspecialchars($var)?>
Somit wird auch gleich noch der Kontextwechsel beachtet.
Welcher Kontextwechsel?
Warum sollte man htmlspecialchars()
anwenden, wenn man eine Textdatei (-ressource? Na jedenfalls text/plain) generiert?
LLAP 🖖
sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
Tach!
Das ist ein Test: <?=htmlspecialchars($var)?>
Somit wird auch gleich noch der Kontextwechsel beachtet.
Welcher Kontextwechsel?
Warum sollte man
htmlspecialchars()
anwenden, wenn man eine Textdatei (-ressource? Na jedenfalls text/plain) generiert?
Welche Textressource?
Dass da eine Textdatei inkludiert wird, heißt nicht automatisch, dass die Ausgabe des Scripts text/plain ist. Allerdings kann man aus dem gegebenen Beispiel gar nicht entnehmen, von welchem Content-Type die Ausgabe ist. Eine eventuell vorhandener header()-Aufruf wird nicht gezeigt. Ich ging vom Default-Wert text/html aus. Muss nicht der Fall sein, aber da kann der OP ja auch intervenieren, wenn das nicht der Fall ist.
dedlfix.
@@dedlfix
Welche Textressource?
„ich habe eine Datei "text.txt"“
Ich konnte nirgends erkennen, dass der OP vorhat, den Text in HTML einzubetten.
LLAP 🖖
sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
Tach!
„ich habe eine Datei "text.txt"“
Ich konnte nirgends erkennen, dass der OP vorhat, den Text in HTML einzubetten.
Richtig, diese Textdatei sagt aber auch nichts über das Ziel aus und HTML als Default-Fall kann auch nicht ausgeschlossen werden. Ich ergänze den fraglichen Satz noch:
Somit wird auch gleich noch der Kontextwechsel beachtet. Vorausgesetzt, $var enthält nur Daten und keinen HTML-Code, und die Ausgabe ist ein HTML-Dokument.
dedlfix.