2012-03-29 3 views
0

Ich möchte Binärdatei in Base64 zu kodieren und es in PHP-Seite (inline mit dem Code), Und wenn diese Seite die Datei an den Browser streamen, Popup-Download-Dialog.
Irgendwelche IdeenEncodieren Sie Binärdatei in PHP-Seite

+0

Ich möchte nur die Idee – MrBassam

+2

Nun, es ist 'Druck base64_decode (‚02FAF ....‘);' und nicht praktikabel, wenn die Datei größer als der Speicher auf Ihre PHP-Interpreter zur Verfügung steht. – mario

+0

Mario, post diese usegul Antwort nicht als Kommentar, sondern eine Antwort selbst :) – Gian

Antwort

1

Scheint ziemlich einfach. Verwenden Sie wie bei readfile http-Header, um den Download zu erzwingen, und geben Sie dann die codierte Zeichenfolge wieder.

$decoded_data = base64_decode($encoded_data); 

header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename='.basename($file)); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate'); 
header('Pragma: public'); 
header('Content-Length: ' . strlen($decoded_data); 
ob_clean(); 
flush(); 
echo $decoded_data; 
exit; 
+1

Ich werde Sie nicht sofort für diese abmelden, aber wenn Sie es nicht beheben, könnte ich ... Sie haben die Zeichenfolge zweimal entschlüsselt, einmal, um die Länge der Daten zu erhalten und einmal, um es auszugeben. Sie sollten das Ergebnis von 'base64_decode()' in Variable speichern und die Variable an 'strlen()' und 'echo' übergeben - was wäre, wenn die Daten 100MB wären? – DaveRandom

+0

Guter Punkt. Ich würde das immer noch nicht für große Dateien empfehlen, weil die ganze Datei in den Speicher geladen wird, aber zumindest so, dass sie nur einmal dekodiert wird. – Juhani

+0

Ich persönlich würde es überhaupt nicht empfehlen, es gibt fast keinen Grund, dies zu tun. Ich gebe zu, es ist potentiell schön, eine ganze Anwendung in einer Datei zu speichern (was der einzig legitime Grund dafür ist), aber der kleine ästhetische Vorteil gegenüber den hohen Leistungskosten macht es nicht wirklich machbar. Aber Ihre Antwort ist gut, wenn ein wenig überentwickelt - Die Caching-Header würden besser in Richtung Client-Caching gesetzt werden, da die Zeichenfolge im Skript statisch ist und es einen großen Aufwand bei der Bereitstellung der Datei gibt, und FYI gibt es keinen solchen HTTP-Header als 'Content-Transfer-Encoding' – DaveRandom