[PHP-users 34497] Re: PNG画像の取得と保存

山本 正浩 yamamoto @ thinkmeta.jp
2009年 4月 9日 (木) 16:41:14 JST


yamamotoです。

> 後半部分を以下のように変更
>    $pngs="";
>    while (!feof($fp)) {
>        $tmp = hexdec(fgets($fp));
>        if (!$tmp) break;
>        $pngs=fread($fp, $tmp);
>        fgets($fp);
>        fwrite($ofp,$pngs);
>    }

pecl_httpが入っている環境であれば、http_chunked_decode()で対応できるようです。

   while (!feof($fp)) {
       $pngs .= fread($fp,8192);
   }
   fwrite($ofp, http_chunked_decode($pngs), 8192);

私も詳しくなかったので勉強になりました。

2009/04/09 16:10 Michiyoshi Buniu <buniu @ dream-link.jp>:
> 豊丹生と申します。
>
> HTTP1.0に変更すると、できそうですが、
> チャンク形式にちょっと興味があったので、
> 最初に提示頂いたスクリプトのを
> HTTP1.1用にちょっと改造してみました。
>
> 2回目の
> $headers=fgets($fp, 4096);
> をコメントアウト
> ※このコメントアウトは
> HTTP1.0にした場合も必要だと思います。
>
> 後半部分を以下のように変更
>    $pngs="";
>    while (!feof($fp)) {
>        $tmp = hexdec(fgets($fp));
>        if (!$tmp) break;
>        $pngs=fread($fp, $tmp);
>        fgets($fp);
>        fwrite($ofp,$pngs);
>    }
>
> 私の環境ではこれでOKでした。
>
> ----- Original Message -----
> From: "藤本悟司" <satoshi @ try-square.co.jp>
> To: "PHP-users ML" <php-users @ php.gr.jp>
> Sent: Thursday, April 09, 2009 3:41 PM
> Subject: [PHP-users 34493] Re: PNG画像の取得と保存
>
>
>> 藤本と申します。
>>
>>>     $out = "GET
>>> /ifs/ifs?cont=ym+m9&size=260x155&period=V&varminutes=5&bartype=CANDLE&bardensity=MEDIUM&?527
>>> HTTP/1.1\r\n";
>>
>> HTTP1.1を使っているようですね。
>> レスポンスがチャンク形式で返っているのではないでしょうか?
>> http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616#Sec3.6.1
>>
>> HTTP1.0ならば、受け取るエンティティはそのままバイナリイメージのはずです。
>> 試しにHTTP1.0に変えてみてください。

-- 
-<Thinkmeta>------------------------------------------
<?xml version="1.0" encoding="ISO-2022-JP" ?>
<signature>
    <name>山本 正浩[Masahiro Yamamoto]</name>
    <mail>yamamoto @ thinkmeta.jp</mail>
    <web>http://www.thinkmeta.jp/</web>
</signature>


PHP-users メーリングリストの案内