Сохранение строки Base64 на диск в виде двоичного файла с использованием PHP - PullRequest
11 голосов
/ 19 декабря 2008

В качестве учебного пособия по «заглянуть под одеяло» я создаю PHP-скрипт для сбора писем из почтового ящика POP3. Пытаясь использовать двоичные вложения, я застреваю, пытаясь понять, что делать с информацией вложения.

Учитывая строку, которая будет собрана из электронного письма:

------ = _ Part_16735_17392833.1229653992102 Тип контента: изображение / JPEG; имя = trans2.jpg Content-Transfer-Encoding: base64 X-Attachment-Id: f_fow87t5j0 Содержание-Диспозиция: вложение; имя файла = trans2.jpg

/ 9J / 4AAQSkZJRgABAgEASABIAAD / 4QxrRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAUAAAAcgEyAAIAAAAUAAAAhodp

(...)

EAgEAgEAgEAgEAg8IBQRL / Lbe / tJrScHqZ2lkmE4XUP2XcSDZZ2VvZ28dtbsDIYmhkbRxAIJCAQC AQCAQf / ScyAQCAQCAQCAQCAQCAQCAQCAQCAQCAQf / 9k = ------ = _ Part_16735_17392833.1229653992102 -

Есть ли способ сохранить данные на диск, чтобы они были в удобном для использования формате?

Ответы [ 8 ]

27 голосов
/ 19 декабря 2008

Передайте данные в base64_decode () , чтобы получить двоичные данные, запишите их в файл с помощью file_put_contents ()

8 голосов
/ 20 февраля 2009

Если у вас есть много данных для записи, которые необходимо декодировать перед записью, я бы предложил использовать потоковые фильтры, поэтому декодируйте данные по мере их записи ...

$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);
2 голосов
/ 17 мая 2013

Я попробовал следующее, но у меня не получилось, генерировался пустой файл изображения.

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

Я взял код от: Как сохранить изображение PNG на стороне сервера из строки данных base64

0 голосов
/ 13 сентября 2017

Для больших строк base64 из БД вам нужно использовать load ()

$imgdata = $FromDB['BASE64']->load();
$imgdata =  base64_decode($imgdata);
file_put_contents($fileName, $imgdata);
0 голосов
/ 26 апреля 2016
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;
}
0 голосов
/ 22 августа 2012

У меня была похожая ситуация, и это то, что я сделал. Как отмечалось ранее, не забудьте удалить посторонние строки до и после строки 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);
?>
0 голосов
/ 19 декабря 2008

Хотя новое изобретение колеса имеет некоторую развлекательную и образовательную ценность, я постараюсь не поддаться искушению: Mailparse , Mail_mimeDecode

0 голосов
/ 19 декабря 2008

Отрезать первую и последнюю строку, base64decode и сохранить под заданным именем файла.

сделано.

...