PHP base64データを画像ファイルに変換したいです。
参考サイトhttps://techacademy.jp/magazine/47478 を元に以下のようにコードを書きました。
コードの全体は以下です。
PHP
$image = 'base64形式画像'; // base64デコード $data = base64_decode($image); // finfo_bufferでMIMEタイプを取得 $finfo = finfo_open(FILEINFO_MIME_TYPE); $mime_type = finfo_buffer($finfo, $data); //MIMEタイプをキーとした拡張子の配列 $extensions = [ 'image/gif' => 'gif', 'image/jpeg' => 'jpg', 'image/png' => 'png' ]; //MIMEタイプから拡張子を選択してファイル名を作成 $filename = 'image.' . $extensions[$mime_type];
しかし、以下の箇所で、エラー「Undefined array key "application/octet-stream"」となります。
PHP
//MIMEタイプから拡張子を選択してファイル名を作成の箇所で $filename = 'image.' . $extensions[$mime_type];
エラーの箇所に至るまでいくつか不明な点があります。
- $data = base64_decode($image);の箇所で dd($data);をすると、以下の文字列が返ってきます。
これはbase64から正しくデコードされているのでしょうか?
dd($data);
^ b"u½Zèfá{·gü¼{«"T\x13æ├BåéÇ\x00\x00\x03RR\x11\x14Ç\x00\x00á\x00\x00\x00á\x00@└\x00\x00ÇÍÏ\x00\x00\x00\x01\x19ðSP@\x00,c┬ \x18A@\x00\x00\x08\x18Ê\x14ô@\x00\x1EëÇ\x00 !\x00\x00>Ç\x00\x00 :\x00\x00\x1DL\x00\x00:ÿ\x00\x00\x0Eª\x00\x00\x05▄'.öO\x00\x00\x00\x01ö\x13\x15\x11\x7F┘Ç? ı█Ý┐\x00\x00\x00\x00XÆÐÐ\x00\x7F└ïwÇ\x00\x00\x01¦\x12SQA°└ãÇA┼ºòÐ┴Ç\x00\x00\x12\x12Q\x10U\x1E6╗p@@@\x00\x00 ê?Ù█Æ\x10\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1F\x06rá\x00\x00X\x0F2Ô\x00\x00\x00\t]\x11V\x1D\x19\x18]\x19Nÿ▄ÖX]\x19@\fî\fNKL\f╦Lìò\fL\x0Eî╬îîè╠\x0ENî\f\tÔ0U\x00\x00\x00\t]\x11V\x1D\x19\x18]\x19Nø[┘\x1AY×@\fî\fNKL\f╦Lìò\fL\x0Eî╬îîè╠\x0ENî\f\x15Á^z\x00\x00\x00¿¦\x11V\x1D\x10██[Y[Ø\x00\x12Æ\x12\x13\x12\x1DR\x1C\x12╠╬\x12\\x12╠Tæ£MÌ\x11Ë┌\x16ø\x18æ\fûØ\\x12NP┌]òîYô]LSSÉî\x14\f¦LÏòV\x15¦£Ö[\x1AòT£\\x14N\x10ÏÖûNSû\fø\LıÖRøPö\x12TòÐ┘\x1E\x1D\x13S\x13ôMÿÍÖ\x18Í\f\x16XÖòZ\x1CöP┘\ÏÖ┌Ðÿ▄╬UË█Ü\x15\x11\x1ASX┌Ê█Ðıö╬UÆ\x1D\x10T]Tì\x0EQÖTøTÏøÆ╠£\x1DUì£U\x19û\x18£Y\x15ÖıL╠ØıìÌYL£\x1EMRË╠ÿS\x19ÖöQôò]█┌ÐRYÍÆ\x10▄\x15ôî\x1DÆ╬\x12\x14\eöSîôP▄\x18ö▄]S£XX╠Í\x13ÿUÌ\x11ö\x19┘ıı▄£ÏUSı\\x11MQÆ£Qð┘═┌MÐXQNQò╠\x15Ö\eûì┌\x0E\Ì\x19╠öÐPP═LÌL\x1A\x10N\eÐÈ]]¦¦¦ıæöY¦PTìÈ\UÖ╠R\x10ÏØ£\x11öûìôÈË×Æ£╬Y\x1E\x1E\f\x15Yû\x10RæZ[[RÉ\SîÆØ\x1D\x16R█\x11\x13ÈÈ\x12[æ\eSòÜ┌▄[îîô[\x13Øô\x10SøÈø\fUÿRÖÜÄUÜØYPËP╠L£¦\fÜVÿP█\x1EìLæV\Z█]]Q\x1CÍXî[ÊòYÿ█\x19£█\e\fî\x13¦\Ðøö\x11\x19\x19ðQ\x1Cì\eÜ\x1EU^\x0EVS\x15\x10\\x1D\f×\x18ÖØ\ÐY┘RìÖÏ╬\x15×\x1D\x10UØÜôø\x1C£═LË]\x19T£\x13É╠\fÌU\x12\x10]ø┌\x11[Í£\fË\x1DìÌÖÊ\eøøæ┘øÉ£Íæ┌ÐPÄ\òðæV\x18]\x10ÏZ\x1CU╠V\x1A[\eîØ╠\x1D\x1DìîØò\x14ðì\f\x1DÍ£\x1CË\x19ÜıÜÉY^\x10Ï┌RôÈ\f\fæP═R\f╠\x13T╠SVì\x1CYÐÈÖ\x1Cæ█ø┘S[\x1A\x1EXÐ\x12î\x13\f═\x11M┌\x15ÉNYÈ\x15T\x11¦\x16^Æ\ô[\fòÍÆðø^\x10ZLøÆ^\x11òøÜû\eMðËÆ┌Z\x10×\x11ø]═×[┘\ÆÿPQɦÆøòP×B¡ééÚ@\x00\x00\x00\x12QSæ+Éÿ ◀"
2.また、// finfo_bufferでMIMEタイプを取得
$finfo = finfo_open(FILEINFO_MIME_TYPE);
の箇所でdd($finfo);をすると以下の結果が返ります。これで正しいのか??
dd($finfo);
finfo {#1375}
3.そして、 $mime_type = finfo_buffer($finfo, $data);の箇所でdd($mime_type);すると、「 "application/octet-stream"」となります。
application/octet-streamとは、ファイルの種類は気にするな!と認識しているのですが、もし自分の認識が正しければ、以下の箇所で「Undefined array key "application/octet-stream"」
となるのがわかりません。。。。なんで配列系のエラーが出るんだ。。。。
どこから間違えているのでしょうか?
0 コメント