無料スクリプトならphp.to

PHPスクリプト無料配布所 :: PHP.TO







アクセスアップ・上位表示ならSEO.CUG.NET
安くて早い!SEOに強いコーディング代行サイト AcodeZ(アコーズ)
無料スクリプトならphp.to PHPスクリプト無料配布!php.to
リンクはご自由に


0002. 正規表現を用いて、外部テンプレートファイルにダイレクトに変数を埋め込む方法
<< 0001. PHP4で1970年1月1日以前のデータをtime関数互換のinteger型で扱う方法
Webアプリケーションにおいて、稼動後にちょっとした文面の変更が発生することは結構あります。

こういったケースのため、ロジックとデザインの分離するために SmartySmartyの情報へ などのテンプレートエンジンを用いるケースも多々あると思いますが、例えばECサイトのシステムでお客が商品を購入した際にシステムから送信する確認用メールの文面を変更したい場合など、HTML以外の用途のものにSmartyなどを導入するのも大仰です。

テンプレートエンジンなどを用いずに、直接コードの中に文面を挿入しているケースも巷でよく見かけますが、その際にPHPの知識のない運営担当者がプログラムの動作に影響する部分を書き換えてしまう可能性を考慮すると、あまり上手いやり方ではありません。(実際問題、こういう実装をしてトラブルが起こっているケースがよくあるようです)

そこで今回は、PHPの知識のない運営担当者でも変数の埋め込みができるなど、柔軟な方式な対応が出来る、簡単なサンプルを紹介します。
この方式を使えば、プログラムを直接メンテナンスする必要がなくなり、運営担当者はテンプレートファイル(テキストファイル)のメンテナンスをするだけで良くなります。

これは実際、私が複数のシステムに導入してきたものなので、[余計な情報を埋め込まない]という点のみきちんと配慮しながら使えば、かなり利便性が高いことを実感してもらえることでしょう。

簡単に説明すると、preg_matchpreg_matchのマニュアルへ 関数を使って、変数のバインド対象となるフォーマット(下記のサンプルでは{%変数名})とマッチした場合、str_replace()str_replace()のマニュアルへ 関数を通して変数に置換するというものです。
似たようなことは eval()eval()のマニュアルへ 関数でも出来ますが、変数の置換のみに制限される分、安全です。

関数化するときは連想配列に入れた後にextract()extract()のマニュアルへ するなどの工夫を凝らしてください。




<?php
    
/*
        別のファイルで定義した文面に、変数を埋め込んでメールを送信する
    */
    
    // テンプレートファイル(実際は非公開領域に置く事をお勧めします)
    
$mail_template "./data/mail_template_sample.txt";

    
// ファイルの読み込み
    
if (!file_exists($mail_template)) exit;
    
$lines    file($mail_template);
    
$subject  array_shift($lines);// 1行目はメールの件名
    
$body     implode(""$lines);// それ以降はメールの内容
    
    // 埋め込む変数の定義
    
$v_shop   "ABCショッピングサイト";
    
$v_date   date("Y/m/d h:i:s");
    
$v_name   "hogehoge";
    
$v_price  number_format(10000);
    
$v_addr   $_SERVER['REMOTE_ADDR'];
    
    
// 変数の埋め込み
    
while (preg_match("/\{%(.*)\}/U"$subject$match)){
        
$subject ereg_replace($match[0], $$match[1], $subject);
    }
    while (
preg_match("/\{%(.*)\}/U"$body$match)){
        
$body    ereg_replace($match[0], $$match[1], $body);
    }
    
    
// 埋め込んだ後の結果を表示
    
echo "<pre><code>";
    echo 
$body;
    echo 
"</code></pre>";
    
// 実際には mb_send_mail() 関数でメールを送信してください

?>

⇒ テンプレートファイル
⇒ 実行結果








>> 0003. セキュリティを考慮して、特定の関数を使用不可能にする方法
track back URL : http://php.to/tips/2/trackback/

コメント

コメントはまだありません


よろしければコメントをどうぞ ※spam防止のため、半角英数字のみの投稿はできません
お名前(必須):
URL:
コメント(必須):

パソコンメーカーのデル
XPS 15z
Vostro 3750

- SEO.CUG.NET :: スクリプト配布チーム -