各種システム開発・WEBコンテンツ制作・WEBデザイン・ホームページ制作・インフラ設計・構築・レンタルサーバー・ソフトウェア技術者のアウトソーシング事業を行っております。

2 月
28

【PHP,Smarty】既存システムに対する出力コンテンツの書き換え

技術スタッフ


数百画面を持つ稼働中のシステムに対し、ほぼすべての画面の一部(URL等)のコンテンツを書き換える、しかも動的に
という作業は、影響範囲調査だけでも工数が膨大になりますね。
並行して他の開発が進んでいると調整もかなり苦労します。

この場合に省力的に、安全に、対応する案を幾つかご紹介。

■Webサーバで対応する。

コンテンツ出力時に、特定の文字列を変更する方法です。
PGを殆ど変更しなくて良いため、並行プロジェクトとのコンフリクトの心配もほぼありません。

【Apacheの場合】
・mod_ext_filterモジュールを使う

1.モジュールをロードし
LoadModule ext_filter_module modules/mod_ext_filter.so

2.Filterを定義し
ExtFilterDefine fixtext mode=output intype=text/html cmd=”/bin/sed s/before/after/g”

3.Locationの中に定義します
<Location />
SetOutputFilter fixtext
</Location>

ただし、.htaccess内には適宜できません。

・mod_substituteを使う方法
<Location “/”>
AddOutputFilterByType SUBSTITUTE text/html
Substitute “s/before/after/ni”
</Location>

その他、mod_actionsでもできるようです。

【NginXの場合】
・subs_filter_moduleを使う
nginx.confにて定義

location /hoge {

subs_filter_types text/css text/xml;
subs_filter “before” “after” ir;

}

■smarty側で対応する場合

最終的にsmarty->displayで画面出力をしている箇所をfetchに置き換えて出力するコンテンツを受け取ります。
そして置換をかけて出力すればOKです。

#$smarty->display(‘output.tpl’);
$html = $smarty->fetch(‘output.tpl’);
$html = preg_replace(‘/before/’,’after’,$html);
echo $html;

ソースコードを全箇所洗い出して、影響範囲を調べて、他プロジェクトとのコンフリクトや影響を心配しつつ
では、莫大な時間と労力がかかりますが、Webサーバ側やテンプレートエンジン、フレームワーク側を変更
するだけで大幅に工数を削減できます。

こういう案件では、PG変更による解を出しがちですが、フレームワークやサーバスキル等も持っていますと
とても工数を削減できる方法が見つけられる事もあります。

MRPでは、PGを目指すメンバーにはPGだけでなく、インフラやサーバスキルも教育し
より柔軟な解を導き出せるよう、人材の育成をしております!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

月別アーカイブ

カテゴリ