しかも色々と制約つき(当然っちゃー当然だけど)
概要としてやった事は以下な感じ
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 件のコメント :
コメントを投稿