代码之家  ›  专栏  ›  技术社区  ›  Matt

使用php将base64字符串保存为二进制文件

  •  11
  • Matt  · 技术社区  · 16 年前

    作为我自己的“看看封面”教程,我正在构建一个PHP脚本来收集来自POP3邮箱的电子邮件。在尝试使用二进制附件时,我一直在试图找出如何处理附件信息。

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

    ------=\U零件号\U 16735\U 17392833.1229653992102 内容类型:image/jpeg;name=trans2.jpg 内容传输编码:base64 X-附件-ID:F t5j0 内容处理:附件;文件名=trans2.jpg

    /9J/4aaqskzjrgabageasabiaad/4qxrrxhpzgaatu0akaaaaaagabwesaaaaaaabaaaaaaaaaaaaaua aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaexaaaaaaaaaaaaaaaaaaaaaaaaaaa方法

    (…)

    鹰鹰鹰8ibqrl/lbe/tjrschqz2lkme4xup2xcsdz2vz28dtbsdiymhkbrxaijcaqc aqcaqf/scyaqcaqcaqcaqcaqcaqcaqcaqcaqqqf/9k= ------=零件号U 16735 U 17392833.1229653992102--

    有没有一种方法可以将数据保存到磁盘上,使其成为可用的格式?

    8 回复  |  直到 16 年前
        1
  •  26
  •   Paul Dixon    16 年前

    将数据传递给 base64_decode() 要获取二进制数据,请将其写入 file_put_contents()

        2
  •  8
  •   Mike Boers    16 年前

    如果你有很多数据需要写出来,在写之前需要解码,我建议你使用流过滤器,这样在你写数据的时候解码数据…

    $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);
    
        3
  •  2
  •   Community ƒernando Valle    7 年前

    我尝试了下面的方法,但不适用于我,正在生成一个空的图像文件。

    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

        4
  •  0
  •   Milen A. Radev    16 年前

    虽然重新设计车轮具有一定的娱乐和教育价值,但我会努力抵制诱惑: Mailparse , Mail_mimeDecode

        5
  •  0
  •   Suman    12 年前

    我也有类似的情况,这就是我所做的。如前所述,确保删除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);
    ?>
    
        6
  •  0
  •   René Höhle oasisfleeting    12 年前

    切掉第一行和最后一行, BASIC 64译码 并在给定文件名下保存。

    完成。

        7
  •  0
  •   user2511210    8 年前
    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;
    }
    
        8
  •  -1
  •   esdebon    7 年前

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

    $imgdata = $FromDB['BASE64']->load();
    $imgdata =  base64_decode($imgdata);
    file_put_contents($fileName, $imgdata);