tags:

views:

472

answers:

3

hi,

I am writing an email module for my web app that sends a html email to a user on completion of a task such as signing up. Now as the formatting of this email may change I've decided to have a template html page that is the email, with custom tags in it that need to be replaced such as %fullname%.

My function has an array in the format of array(%fullname% => 'Joe Bloggs'); with the key as the tag identifier and the value of what needs to replace it.

I've tried the following:

        $fp = @fopen('email.html', 'r');

    if($fp)
    {
      while(!feof($fp)){

   $line = fgets($fp);        

   foreach($data as $value){

       echo $value;
       $repstr = str_replace(key($data), $value, $line);        

   }


   $content .= $repstr;

      }
      fclose($fp);
    }

Is this the best way to do this? as only 1 tag get replaced at the moment... am I on the right path or miles off??

thanks...

A: 

That looks like it should work, but I'd use "file_get_contents()" and do it in one big blast.

GoatRider
A: 

A slightly different approach is to use PHP's heredocs combined with string interpolation i.e.:

$email = <<<EOD
<HTML><BODY>
Hi $fullname,
  You have just signed up.
</BODY></HTML>
EOD;

This avoids a separate file, and should make things beyond simple substitution easier later.

+1  A: 

I think the problem is in your foreach. This should fix it:

foreach($data as $key => $value){
    $repstr = str_replace($key, $value, $line);               
}

Alternatively, I think this should be more effective:

$file = @file_get_contents("email.html");
if($file) {
    $file = str_replace(array_keys($data), array_values($data), $file);
    print $file;
}
Paolo Bergantino