Manchmal kann es nützlich sein ein Bild direkt im Quelltext abzulegen. Z.B. für grafisch gestaltete Fehlermeldungen oder Installationshinweise bei Setup-Routinen. Dann muss man sich nicht um Pfade oder Leserechte für die Grafiken kümmern. Und man muss ggf. nur mit einer Datei umgehen.
Das sollte man aber nur in Ausnahmefällen also bei sehr speziellen Anwendungen machen. Und nur bei sehr kleinen Dateien, also vor allem GIF oder PNG Format, weniger bei JPG Bildern.
<?php
/**
* Ein einfaches Upload-Formular um ein Grafik per
* base64 zu kodieren und direkt im Code abzulegen.
*/
// maximale Dateigröße die verarbeitet wird
$maxsize = 200000;
// Breite zur Formatierung der bas64-Daten (nur zur besseren Darstellung)
$maxwidth = 60;
if (!empty($_FILES)){
if ($_FILES['theimage']['size'] > $maxsize){
die ('maximale Grösse überschritten');
}
$tmp = file_get_contents( $_FILES['theimage']["tmp_name"])
OR die ('Kann Datei nicht öffnen');
$size = getimagesize($_FILES['theimage']["tmp_name"])
OR die ('Nur Bilddateien möglich');
$data = wordwrap(base64_encode($tmp), $maxwidth, "\n", 1);
echo <<< IMGDATA
<pre>
<?php
// Ein Bild direkt im Quelltext speichern und ausgeben
// Name : {$_FILES['theimage']['name']}
// Breite : {$size[0]}
// Höhe : {$size[1]}
// Bytes : {$_FILES['theimage']['size']}
// Bilddaten base64 kodiert
\$TheImage = <<< EOT
$data
EOT;
header('Content-type: {$size['mime']}');
header('Content-Disposition: inline; filename={$_FILES['theimage']['name']}');
echo base64_decode(\$TheImage);
?>
</pre>
IMGDATA;
} else {
echo <<< EOT
<form action="{$_SERVER['PHP_SELF']}" method="post" enctype="multipart/form-data">
<input type="file" name="theimage"><input type="submit" value="Bild hochladen">
</form>
EOT;
}
?>