imagen file_set_contents file_put_contents example decodificar php binary base64

php - file_set_contents - file_put_contents example



Guardar una cadena Base64 en el disco como un binario usando PHP (8)

Pase los datos a base64_decode () para obtener los datos binarios, escríbalos en un archivo con file_put_contents ()

Como tutorial de "mira debajo de las sábanas" estoy construyendo un script PHP para recopilar correos electrónicos de un buzón POP3. Al intentar utilizar archivos adjuntos binarios estoy atascado tratando de averiguar qué hacer con la información del archivo adjunto.

Dada una cadena que se obtendría de un correo electrónico:

------ = _ Part_16735_17392833.1229653992102 Content-Type: image / jpeg; name = trans2.jpg Content-Transfer-Encoding: base64 X-Attachment-Id: f_fow87t5j0 Content-Disposition: attachment; filename = trans2.jpg

/ 9j / 4AAQSkZJRgABAgEASABIAAD / 4QxrRXhpZgAATU0AKgAAAAgABwESAAMAAAABAAEAAAEaAAUA AAABAAAAYgEbAAUAAAABAAAAagEoAAMAAAABAAIAAAExAAIAAAAUAAAAcgEyAAIAAAAUAAAAhodp

(...)

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

¿Hay alguna manera de guardar los datos en el disco para que estén en un formato utilizable?


Si bien reinventar la rueda tiene cierto valor educativo y de entretenimiento, trataría de resistir la tentación: Mailparse , Mail_mimeDecode


Si tiene que escribir una gran cantidad de datos que deben decodificarse antes de escribir, le sugiero que use filtros de transmisión para decodificar los datos mientras los escribe ...

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


Corta la primera y la última línea, base64decode y guárdalo debajo del nombre del archivo.

hecho.


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


Intenté el siguiente pero no funcionó para mí, estaba generando un archivo de imagen vacío.

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

así es como funcionó para mí:

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

Tomé el código de: Cómo guardar una imagen PNG del lado del servidor, desde una cadena de datos base64


Para cadenas base64 grandes de una base de datos necesita usar load ()

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


Tuve una situación similar, y esto es lo que hice. Como se señaló anteriormente, asegúrese de eliminar las líneas extrañas antes y después de la cadena 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); ?>