Intereting Posts
Не удается подключиться к Facebook с запросом на завивание Unity 2017.3.0f3 отправленные данные не отправляются на сервер LAMP Найдите ссылку youtube в строке PHP и преобразуйте ее в код встраивания? Получить перенаправление адреса URL-адреса Передача переменных $ _GET (или $ _POST) с разбиением на страницы (SESSION не работает) Перезагрузите страницу после успешной отправки формы с помощью ajax Как я могу выйти из неактивных пользователей через 30 минут? Не удалось получить данные объекта Yii2, возвращенные как Json Используйте хранилище laravel с холстом изображения () Экранирование / кодирование одинарных кавычек в атрибутах данных HTML5, закодированных JSON Как chmod папка, чтобы сделать ее доступной для записи на сервере в php Не удается проверить открытый ключ openssl Частота цикла PHP в случайном порядке? Yii addInCondition с поплавками: Как? и почему addInCondition ('column', array (1.1, 1.3)) не работают? Как гарантировать одновременные потоки не получить то же значение в MYSQL?

Сохранение строки Base64 на диск как двоичный файл с использованием PHP

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

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

—— = _ Part_16735_17392833.1229653992102 Content-Type: image / jpeg; name = trans2.jpg Content-Transfer-Encoding: base64 X-Attachment-Id: f_fow87t5j0 Content-Disposition: attachment; имя файла = trans2.jpg

/ 9j / 4AAQSkZJRgABAgEASABIAAD / 4QxrRXhpZgAATU0AKgAAAAgABWESAAMAAAABAAEAAAEaAAUA AAABAAAAYgEbAAUAAAABAAAAAGEoAAMAAAABAAIAAAExAAIAAAAUAAAAcgEyAAIAAAAUAAAAhodp

(…)

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

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

Solutions Collecting From Web of "Сохранение строки Base64 на диск как двоичный файл с использованием PHP"

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

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

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

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

 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

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

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

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

сделанный.

 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; } , 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; } 

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

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