Bir ikili kullanarak PHP olarak diske Base64 dize kaydetme

6 Cevap php

Kendim için bir "kapakları altında bakmak" öğretici olarak ben bir POP3 posta kutusuna gelen e-postaları toplamak için bir PHP komut dosyası inşa ediyorum. Ben ek bilgileri ile ne anlamaya çalışıyorum şaşırıp ikili ekleri yararlanmak için çalışırken.

Bir e-posta toplanan olacak bir dize Verilen:

------=_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--

Bu kullanılabilir bir formatta olacağını böylece diske veri kapalı kaydetmek için bir yolu var mı?

6 Cevap

base64_decode(), ikili verileri almak file_put_contents() ile bir dosyaya yazmak için veri aktarmasına

Eğer yazmadan önce deşifre edilmesi gerektiğini yazmak için çok fazla veri varsa, ben bunu yazmak kadar verilerin kodunu akış filtreleri kullanarak öneririm ...

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

Tekerleği yeniden bazı eğlence ve eğitim değerine sahipken, ben günaha karşı denemek: Mailparse, Mail_mimeDecode

Ben benzer bir durum vardı, ve bu ne yaptım. Daha önce belirtildiği gibi, base64 dize önce ve sonra yabancı satırları kaldırmak için emin olun.

<?php
$INPUT = "inputfile_base64_encoded.txt";
$OUTPUT = "output_decoded.zip";
$contents = file_get_contents($INPUT);
$bin = base64_decode($contents);
file_put_contents($OUTPUT, $bin);
?>

, Ilk ve son satırı kesmek base64decode ve verilen dosya adı altında kaydedin.

yapılır.

Ben aşağıda denedim ama benim için işe yaramadı, boş bir resim dosyası üretiliyor.

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

Bu benim için nasıl çalıştı:

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

I took the code from : How to save a PNG image server-side, from a base64 data string