Philz: Externe php-html-datei in String-Variable speichern

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

  1. 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

    1. <?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

  2. 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

    --
    Bitte keine Mails mit Fachfragen - dafuer gibt es das Forum!
    Ich mag es, wenn URLs verlinkt sind (</faq/#Q-19>).
    Oft gestellte PHP-Fragen beantwortet die dclp-FAQ bestens: http://www.dclp-faq.de/
    1. 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

    2. 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

      1. 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