14

私自身の「カバーの下を見る」チュートリアルとして、POP3 メールボックスから電子メールを収集するための PHP スクリプトを作成しています。バイナリ添付ファイルを利用しようとしているときに、添付ファイル情報をどうするかを理解しようとして立ち往生しています。

電子メールから収集される文字列を指定すると、次のようになります。

------=_Part_16735_17392833.1229653992102 コンテンツ タイプ: 画像/jpeg; name=trans2.jpg Content-Transfer-Encoding: base64 X-Attachment-Id: f_fow87t5j0 Content-Disposition: attachment; ファイル名=trans2.jpg

/9j/4AAQSkZJRgABAgEASABIAAD/4QxrRXhpZgAATU0AKgAAAAgABweSAAMAAAABAAEAAAEaAAUA AAABAAAAYgEbAAUAAAAAAAagEoAAMAAAABAAIAAAExAAIAAAAAAAAAAcgEyAAIAAAAAAAAAAhodp

(...)

EAgEAgEAgEAg8IBQRL/Lbe/tJrScHqZ2lkmE4XUP2XcSDZZ2VvZ28dtbsDIYmhkbRxAIJCAQC AQCAQf/ScyAQCAQCAQCAQCAQCAQCAQCAQCAQf/9k= ------=_Part_16735_17392833.1229653992102--

データをディスクに保存して、使用可能な形式にする方法はありますか?

4

8 に答える 8

29

データをbase64_decode()に渡してバイナリ データを取得し、それをfile_put_contents()でファイルに書き出します。

于 2008-12-19T13:28:36.163 に答える
8

書き出すデータがたくさんあり、書き込む前にデコードする必要がある場合は、ストリームフィルターを使用することをお勧めします。そのため、書き込むときにデータをデコードします...

$fh = fopen('where_you_are_writing', 'wb');
stream_filter_append($fh, 'convert.base64-decode');

// Do a lot of writing here. It will be automatically decoded from base64.

fclose($h);
于 2009-02-20T03:51:33.320 に答える
2
function base64_decode_file($data)
{
    if(preg_match('/^data\:([a-zA-Z]+\/[a-zA-Z]+);base64\,([a-zA-Z0-9\+\/]+\=*)$/', $data, $matches)) {
        return [
                'mime' => $matches[1],
                'data' => base64_decode($matches[2]),
        ];
    }
    return false;
}
于 2016-04-26T07:31:38.603 に答える
2

以下を試しましたが、うまくいきませんでした。空の画像ファイルを生成していました。

file_put_contents('img.png', base64_decode($base64string));

これが私にとってどのように機能したかです:

$data = 'data:image/png;base64,AAAFBfj42Pj4';

list($type, $data) = explode(';', $data);
list(, $data)      = explode(',', $data);
$data = base64_decode($data);

file_put_contents('/tmp/image.png', $data);

私はからコードを取りました: How to save a PNG image server-side, from a base64 data string

于 2013-05-16T22:01:18.137 に答える
0

最初と最後の行、base64decodeを切り取り、指定されたファイル名で保存します。

終わり。

于 2008-12-19T13:20:11.797 に答える
0

車輪の再発明には娯楽と教育の価値がありますが、私は誘惑に抵抗しようとします: MailparseMail_mimeDecode

于 2008-12-19T19:11:18.000 に答える
0

私も似たような状況でした、そしてこれが私がしたことです。前述のように、base64 文字列の前後の不要な行を必ず削除してください。

<?php
$INPUT = "inputfile_base64_encoded.txt";
$OUTPUT = "output_decoded.zip";
$contents = file_get_contents($INPUT);
$bin = base64_decode($contents);
file_put_contents($OUTPUT, $bin);
?>
于 2012-08-21T21:20:30.773 に答える