しかも色々と制約つき(当然っちゃー当然だけど)
概要としてやった事は以下な感じ
imggetter.php
header("Content-Type: image/png");
$imgfile = @file_get_contents($imgUrl);
if($imgfile){
//画像判別は適宜
if(XXXXXXX){
//画像ファイルの処理
$imgid = imagecreatefromstring($imgfile);
imagepng($imgid);
imagedestroy($imgid);
}else{
//エラーメッセージ処理
・・・
・・・
・・・
}
}else{
//ファイル取得失敗の処理
・・・
・・・
・・・
}
上からみますと
header("Content-Type: image/png");
レスポンスヘッダーにこれは画像(PNG)ファイルだと教えます。$imgfile = @file_get_contents($imgUrl);外部サイトにある画像をHTTPプロトコルから取得。しかもテキストで(笑
先ずは「@」の有無ですが、file操作系関数で@無しだと、エラーが発生した場合(
ファイルが取れないとか)
にブラウザにPHPエラーが表示されてしまいます。で、有りにして表示はせずに
戻り値のfalseを使って独自のエラーメッセージを出すようにさせる為にやってま
す。
そして、ここに制限があって、正常時には画像が返ってくるけど、異常時にはエ
ラーなURLから
メッセージ(コード付)のテキストが返ってくる。
if分の中
まー普通に分岐です(^^;
なので、テキストで読み込んであげないとエラーコードを取得出来ない。
ここでは省略してますが、エラー処理がやりたいのでこうしてます。
エラーコード(テキスト)とファイル無しエラーで処理を分けなければimagecreatefrompng
、imagecreatefromString
を使えば良いと思われ。
成功時にはイメージリソースIDから
imagepngで生成、imagedestroyでイメージのデータをメモリから削除してます。
イメージ生成する関数とimagedestrou関数は必ずワンセットにしないと画像デー
タがメモリに
残ってしまうらしいです。怖いですね~。
ちなみにimagepngとやるだけで、レスポンスに画像データが入り(ブラウザに表示
され)ました。
ちょっと表現が適当だけど、こんな感じ。
header部分にこんなのが書いてあった。
header("Cache-Control: no-cache, Content-Type: image/png");
Firefox 2.0 では画像が文字列データとして表示されてしまってびっくりしました。
IE6.0 sp2 では表示されてたんですがね。
他のブラウザだとどうなるんだろ???
まーここらへんの考察は今回は省きます。
0 件のコメント :
コメントを投稿