プロが教える店舗&オフィスのセキュリティ対策術

PHP+smartyを使って開発をしております。

【image.php】
イメージを出力するPHP
【index.php】
処理PHP
【index.tpl】
画面のテンプレート

3つのファイルがあり、
(1)
index.phpにアクセスすると、
index.tplのテンプレートが呼び出されるようになっています。
index.tplの中で、<img src="image.php">とすると
image.phpで出力した画像がindex.tplの中に表示されます。

(2)
index.phpにアクセスすると、
index.tplのテンプレートが呼び出されるようになっています。
index.tplの中で、<img src="{imageChange}">とすると
image.phpで出力した画像がindex.tplの中に表示されずバイナリデータが表示されてしまいます。
index.phpの中で関数が使用出来るように
$smarty->register_function( "imageChange", "imageChange" );
と書いてあります。
(2)でやりたい理由として、
(1)でやるとパラメータを渡す際に、
?aaa=1&bbb=2&ccc=9&ddd=4.....としなければいけないのと、
処理毎にPHPファイルを分けないといけない為です。

何とか関数を使用してテンプレートで呼び出す方法はないでしょうか。
他にいい方法がありましたら他の方法でも構いません。
ご教授お願い致します。

A 回答 (3件)

たとえば



## MyImage.php
class MyImage {
. . function html($src, $options = array()) {
. . . . return '<img src="image.php?params" />';
. . }
}

## image.php
readfile('aaa.jpg');

## index.php
$smarty->assign('image', new MyImage());

## index.tpl
{$image->html('aaa.jpg', array('width'=>100, 'height'=>50, 'type'=>'gif'))}

なんか中途半端だな..
    • good
    • 0

imgタグの中のsrcという属性は、画像の位置を指す属性であって、画像データをさす属性ではありませんから、


この属性の中に画像データを埋め込んでも、それを表示することは不可能です。

1つのデータファイルで画像もhtmlソースもデータとして処理し表示するのはほぼ不可能です。
なので1以外の手段は使えない。

この回答への補足

ご回答ありがとうございます。

(1)に書いた場合うまくいくのは、
image.phpが画像ファイルとして認識されているというからでしょうか?
処理的には同じように見えるのですが、
確かにパス指定とそうでないものなので違いますね。
何とかうまく出来ないものかと思いましたが無理そうなので
(1)の方法でやろうかと思います。
ありがとうございました。

補足日時:2009/09/16 09:13
    • good
    • 0

>バイナリデータが表示されてしまいます


のは imageChange function がちゃんと書けてないだけですよね?

URLを生成した文字列の変数や
URLを生成するメソッドをもったオブジェクトを
Smartyに渡してやるのはどうでしょうか。

PS. ?aaa=1&bbb=2&ccc=9&ddd=4 は具体的にどんな値なんでしょうか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>>バイナリデータが表示されてしまいます
>のは imageChange function がちゃんと書けてないだけですよね?
imageChangeを関数にしないでimageChangeの処理と全く同様のPHPを
<img src="imageChange.php">のように呼び出すと問題なく表示されます。

>PS. ?aaa=1&bbb=2&ccc=9&ddd=4 は具体的にどんな値なんでしょうか?
やりたい事としては、aaa.jpgというイメージファイルがあり、
<imageChange src="aaa.jpg" width="100" height="50" type="gif">
と記述すると、画像を幅100、高さ50、画像をgifに変換したものを
表示したいと思っております。
?aaa=1&bbb=2&ccc=9&ddd=4 は具体的には
?src=aaa.jpg&width=100&height=50&type=gifみたいな感じになります。

>URLを生成した文字列の変数や
>URLを生成するメソッドをもったオブジェクトを
>Smartyに渡してやるのはどうでしょうか。
あまり知識が無い為よくわからないのですが、
具体的にどういったことになるのでしょうか?

お礼日時:2009/09/16 09:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!