Externe php-html-datei in String-Variable speichern
Philz
- php
0 wahsaga0 Philz
0 Thomas Luethi
Hallo erstmal,
Ich bin noch ziemlich frisch in php. Wenn ich auf Etwas-Auf-Der-Hand-Liegendes nicht kam... reisst mir bitte nicht den Kopf ab ;)
Ich habe eine Mailfunktion, die die E-Mail-Adresse eines Benutzers aus einer Datenbank einliest und ihm daraufhin eine personalisierte E-Mail zukommen lässt. Die genaue Nachricht wurde vorher über ein Webformular eingetragen und dem Skript übergeben.
In einem Template (nachricht.tmpl) baue ich nun die HTML-E-Mail an den Benutzer zusammen. In diesem Template werden Nachrichtentext, Absender, usw. mit php gesetzt. Um die ganze Datei geparst der Mail-Funktion als String mitgeben zu können, lade ich sie in einen Buffer.
Beispiel (nachricht.tmpl):
<?php ob_start("message"); ?>
<html>
<head>
<style>
Formatierungsangaben
</style>
</head>
<body>
Inhalt
<?php
echo $Variable;
?>
</body>
</html>
<?php $CONTENT = ob_get_contents(); ?>
Das Mail-Versende-Skript (domail.php) sieht so aus:
...
require("nachricht.tmpl");
mail($receiver, $subject, $CONTENT, $header);
...
Nun zu meinem Problem:
Trotz der Verwendung des Buffers zeigt mir php durch das "require" den Inhalt des Templates an. Er soll es aber nicht anzeigen, sondern lediglich per Mail verschicken. Ich dachte, solange ich kein "ob_end_flush()" aufrufe, gibt er den Inhalt nicht aus. Was mache ich falsch?
Danke für Eure Hilfe, Grüsse,
Philipp
hi,
<?php $CONTENT = ob_get_contents(); ?>
setzte hinter diese zeile doch auch noch mal ein http://www.php.net/manual/de/function.ob-end-clean.php.
gruss,
wahsaga
<?php $CONTENT = ob_get_contents(); ?>
setzte hinter diese zeile doch auch noch mal ein http://www.php.net/manual/de/function.ob-end-clean.php.
Hallo,
danke für Deine Antwort. Ich habe es sowohl mit anschliessendem "ob_end_flush", als auch "ob_end_clean()" bereits versucht. Das Resultat blieb leider das Gleiche :(
Grüsse,
Philipp
Hallo,
Wo der "Fehler" liegt, bzw. warum der Inhalt ausgegeben wird, sehe ich nicht.
Vielleicht solltest Du die Output Buffering Funktionen im eigentlichen Skript
und nicht im Template haben.
Was mache ich falsch?
Das ganze Konzept mit require() und Output Buffering finde ich sehr merkwuerdig.
Ich persoenlich wuerde sowas nie machen.
Warum liest Du den Inhalt der Vorlage-Datei nicht einfach in eine String-Variable
ein und ersetzt dann mit geeigneten String-Funktionen ein paar Platzhalter?
Gruesse,
Thomas
Hallo Thomas,
vielen Dank für Deine Antwort.
Vielleicht solltest Du die Output Buffering Funktionen im eigentlichen Skript
und nicht im Template haben.
hmmm... das wäre tatsächlich eine Möglichkeit, die funktionieren könnte. *freu*
Warum liest Du den Inhalt der Vorlage-Datei nicht einfach in eine String-Variable
ein und ersetzt dann mit geeigneten String-Funktionen ein paar Platzhalter?
Weil ich dann das Template nachträglich nicht mehr mit Dreamweaver o.ä. bearbeiten kann. Ich müsste dann jedes Anführungszeichen maskieren, was (vor allem auf Grund der Grösse des Templates) unübersichtlich und unschön wäre.
Allerdings habe ich vorhin zufällig ein Codebeispiel entdeckt, in dem bei HTML einfache Anführungszeichen verwendet werden. (z.B. color='#00000'). Damit gestalteter Code wäre sowohl für den Menschen gut lesbar als auch für Dreamweaver.
Ich werde die beiden Möglichkeiten mal nachher testen (mein Testserver steht zu Hause) und die Lösung hier posten.
Beste Grüsse,
Philipp
Hallo Thomas
Du hattest recht, ich habe das buffering jetzt aus dem Template rausgenommen und im eigentlichen skript rausgenommen...
siehe da, es funktioniert!
Fast schon zu simpel, als dass ich selbst draufkommen würde *augenverdreh* ... da verzweifelt man an tausend möglichen ursachen und sucht am falschen ort :D
dank' dir!
Philipp
Hallo,
Du hattest recht, ich habe das buffering jetzt aus dem Template rausgenommen und im eigentlichen skript rausgenommen...
Wohl eher "... im eigentlichen Skript reingemacht", nicht wahr?
siehe da, es funktioniert!
Das ist ja schoen. Und Du kannst jetzt ruhig schlafen! ;-)
Wie gesagt, faende ich ein System mit Platzhaltern, die man
ersetzt, sinnvoller.
Warum das mit Dreamweaver und einfachen/doppelten
Anfuehrungszeichen Probleme geben sollte, verstehe ich
zwar nicht, spielt aber auch keine Rolle... ;-)
dank' dir!
Gerngeschehen! Es freut mich, dass ich Dir mit meiner
Idee helfen konnte.
Gruesse + gute Nacht,
Thomas