2009-03-28 21 views
4

私は、サインアップなどのタスクの完了時にユーザーにHTML電子メールを送信するWebアプリケーション用の電子メールモジュールを作成しています。この電子メールの書式が変更されると、私は電子メールであり、%fullname%のような置き換えが必要なカスタムタグを持つテンプレートのhtmlページを持つことに決めました。文字列をPHPでファイルに置き換えます

私の関数の配列はarray(%fullname%=> 'Joe Bloggs')の形式です。タグの識別子としてのキーとそれを置き換える必要があるものの値とを比較します。

私は次のことを試してみた:

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

が、これはこれを行うための最善の方法ですか?ただ1つのタグが現時点で交換されるように...私は正しい道にいるか、何マイル離れていますか?

感謝...それが動作するはずですが、私は「のfile_get_contents()」を使用して、一つの大きな爆発でそれを行うだろうように見えます

答えて

5

あなたのforeachに問題があると思います。これは、それを修正する必要があります

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

を代わりに、私はこれがより効果的であるべきだと思う:

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

Aわずかに異なるアプローチは、文字列の補間すなわちと組み合わせてPHPのヒアドキュメントを使用することです。:

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

これは、別のファイルを回避し、後で簡単に、単純な置換を超えて物事を行う必要があります。

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)); 
関連する問題