0

このコードは正常に動作します (ただし、大きな入力ファイルでは失敗するのではないかと懸念しています)。例 1 はファイル全体を読み取り、ループしません。例 2 は 3k チャンクを読み取り、EOF までループします。

 $in = fopen("in.b64", 'r');
 $out = fopen("out.png", 'wb');
 if ((!$in) || (!$out)) die ("convert: i/o error in base64 convert");
 $first = true;
 while (!feof($in))
 {
    $b64 = fread($in,filesize($in_fn));
    // strip content tag from start of stream
    if ($first) 
    {
        $b64 = substr($b64,strpos($b64,',')+1);
        $first = false;
    }
    $bin = base64_decode($b64);
    if (!fwrite($out,$bin)) die("convert write error in base64 convert");
 }
 fclose($in);
 fclose($out);

このコードは破損した画像を生成しますが、次のようになります。

 $in = fopen("in.b64", 'r');
 $out = fopen("out.png", 'wb');
 if ((!$in) || (!$out)) die ("convert: i/o error in base64 convert");
 $first = true;
 while (!feof($in))
 {
    $b64 = fread($in,3072);
    // strip content tag from start of stream
    if ($first) 
    {
        $b64 = substr($b64,strpos($b64,',')+1);
        $first = false;
    }
    $bin = base64_decode($b64);
    if (!fwrite($out,$bin)) die("convert write error in base64 convert");
 }
 fclose($in);
 fclose($out);
4

1 に答える 1