2009-03-28 10 views
4

Je suis en train d'écrire un module de courrier électronique pour mon application web qui envoie un email html à un utilisateur à la fin d'une tâche comme la signature. Maintenant que la mise en forme de cet e-mail peut changer, j'ai décidé d'avoir une page html modèle qui est l'e-mail, avec des balises personnalisées qui doivent être remplacées telles que% fullname%.chaîne remplacer dans un fichier avec php

Ma fonction a un tableau au format array (% fullname% => 'Joe Bloggs'); avec la clé comme identifiant de balise et la valeur de ce qui doit le remplacer.

J'ai essayé les suivantes:

 $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); 
    } 

Est-ce la meilleure façon de le faire? comme une seule étiquette est remplacée en ce moment ... suis-je sur le bon chemin ou des miles off ??

... merci

Répondre

5

Je pense que le problème est dans votre foreach. Cela devrait corriger:

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

Sinon, je pense que cela devrait être plus efficace:

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

Cela ressemble à ça devrait fonctionner, mais je préfère utiliser « file_get_contents() » et de le faire dans une grande explosion.

0

Une approche légèrement différente est d'utiliser les heredocs de PHP combiné avec interpolation chaîne i.e. .:

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

Cela évite un fichier séparé, et devrait rendre les choses au-delà de la simple substitution plus facile par la suite.

2
//read the entire string 
$str=implode("\n",file('somefile.txt')); 

$fp=fopen('somefile.txt','w'); 
//replace something in the file string - this is a VERY simple example 
$str=str_replace('Yankees','Cardinals',$str); 

//now, TOTALLY rewrite the file 
fwrite($fp,$str,strlen($str)); 
Questions connexes