14

作为我自己的“幕后研究”教程,我正在构建一个 PHP 脚本来从 POP3 邮箱收集电子邮件。在尝试使用二进制附件时,我一直在试图弄清楚如何处理附件信息。

给定一个从电子邮件中收集的字符串:

------=_Part_16735_17392833.1229653992102 内容类型:图像/jpeg;name=trans2.jpg 内容传输编码:base64 X-附件 ID:f_fow87t5j0 内容处置:附件;文件名=trans2.jpg

/9j/4AAQSkZJRgABAgEASABIAAD/4QxrRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAAUA AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAUAAAAcgEyAAIAAAAUAAAAhodp

(...)

EAgEAgEAgEAgEAg8IBQRL/Lbe/tJrScHqZ2lkmE4XUP2XcSDZZ2VvZ28dtbsDIYmhkbRxAIJCAQC AQCAQf/ScyAQCAQCAQCAQCAQCAQCAQCAQCAQCAQf/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

我尝试了以下但对我不起作用,正在生成一个空图像文件。

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);

我的代码来自: 如何从 base64 数据字符串中保存 PNG 图像服务器端

于 2013-05-16T22:01:18.137 回答
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 回答
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 回答
-1

对于来自数据库的大 base64 字符串,您需要使用 load()

$imgdata = $FromDB['BASE64']->load();
$imgdata =  base64_decode($imgdata);
file_put_contents($fileName, $imgdata);
于 2017-09-13T16:10:24.150 回答