2010-11-30 8 views
9

に保存されたテンプレートを評価し、私はSmartyのを使用して、それを評価し、入れたいですphp変数に出力する(それを印刷するか、データベースに再度保存する)。

おかげ

編集:私は= $ smarty->フェッチのy、xの内容は、その後$ file.tplに保存されているかのようにXの内容は、Smartyの使用して評価することにしたい

( 'file.tpl'); ...ファイル

+0

私はXの内容が内容かのように、Smartyのを使用して評価することにしたいですxはfile.tplに格納され、$ y = $ smarty-> fetch( 'file.tpl'); ... xの内容をファイルに保存する必要はありません。 –

答えて

12

あなたはSmartyの3を使用している場合は、簡単

$smarty->fetch('string:'.$template_string); 

または'eval:'.$template_stringでそれを行うことができます。 manual

2

、あなたがいることを意味全体の文字列がデータベースにあります。つまり、文字列の一部として{$ link}が使用されています。私はどのようにスマートな作品が正確にはよく分かりませんが、それでもこれを行うことができれば、その文字列はeval()を実行する必要があります。 (スマートなものが私が紛失しているファンキーなことをしていない限り、やはりスマートでは動作しません)

ここでは、あなたは非常に安全でない設定をしています。データベースがSQLインジェクションを受けると、サーバ全体が危険にさらされる可能性があります。

アプリにハードコードされたファイルからこれらを実行することは、セキュリティ上の大きな懸念事項ではありません。あなたが.tplを呼び出したコードを制御でき、.tpl自体を制御できるからです。これはevalを「安全に」使用することです。これを悪用しようとするサーバーへの深刻なアクセスが必要であるため、悪用しようとするアクセスの種類です。

しかし、データベースからそのデータにアクセスすると、新しいダイナミックテンプレートを追加できるような管理システムがインストールされている可能性があります。攻撃者が侵入する可能性のあるウィンドウがシステムに作成されています。

5

Smarty 3を使用しておらず、文字列/評価リソースがない場合はSmarty eval pluginを使用できます。私はこれを、カスタムリソースを作成するよりはるかに簡単で、はるかに問題が少ないことがわかりました。

$template = "put some {$variables} in here" 
require_once($smarty->_get_plugin_filepath('function', 'eval')); 
$compiled = smarty_function_eval(array('var'=>$template), $smarty); 
+0

あなたは私に多くの時間をくれました。ありがとう! – 1nstinct

3

現時点では、以前のバージョンのsmartyを使用している可能性があるため、上記の例は私のために働いていませんでした。私たちのために仕事をしたソリューションは、唯一の次の行に含ま我々はeval.tplと呼ばれるテンプレート、作成することでした。私たちは、文字列を評価したいときに

{eval var=$string} 

を、我々は単に以下のように使用できます。

$smarty->assign('string', $string); 
$result = $smarty->fetch('eval.tpl'); 
+0

あなたはどのバージョンを使用しているのか知りたいですか? –

+0

@RonanDejheroどうすればわかりますか?もう一人の開発者が以前の私たちのコードベースにすばらしいことを加えました。Smarty.class.phpにバージョン番号がありません。 – AntonChanning

+0

@RonanDejhero待ってください。実際はクラスのプロパティとしてそこにありました。それはバージョン '2.6.18'です。 – AntonChanning

0

見つかりました。 http://www.smarty.net/forums/viewtopic.php?t=18010

これは、Smartyの3を使用している場合、あなたはこのようなテンプレートとしてPHPの変数を使用することができます言う:

$smarty->fetch('string:'.$string); 
関連する問題

 関連する問題