Hi alle zusammen,
ich hab irgendwo gehört das man bilder direkt in eine DB speichern kann, und wollte fragen ob das stimmt, das ich also bilder nicht mehr hochladen muss, sondern direkt in einer tabelle speichern kann.
Für antworten wäre ich dankbar
stimmt. allerdings ist das nicht empfehlenswert, wenn die Bilder oft aufgerufen werden; da dann die Last des DB-Servers erheblich (und unnötig) steigt.
Wie geht das nu?
1. Tabelle:
- die obligatorische id bigint unsigned auto_increment primary key
- ein varchar(30) für den "mimetype" (inklusive 'image/')
- für die Daten Spalte "bilddaten" vom Typ BLOB (max. 64KB-1Byte) oder MEDIUMBLOB (max. 16MB-1Byte)
Es gibt auch noch TINYBLOB (max. 255 Bytes) und LARGEBLOB (max. 4GB-1Byte), aber die sind wohl für Web-Bilder weniger interessant.
2. Einfügen:
// Bilddaten einlesen
$fp=fopen($datei, 'rb')
$daten=fgets($fp, filesize($datei));
fclose($fp);
// Mime-Typ ermitteln
$mimestr = array('binary/unknown', 'image/gif', 'image/jpg',
'image/png', 'application/x-shockwave-flash');
getimagesize($datei, $info);
$mime = $mimestr[$info[2]];[/i]
// in DB schreiben
mysql_query("insert into bilder (bilddaten, mimetype)
values('". mysql_escape_string($daten). "', '$mime')");
// Das mysql_escape_string ist unbedingt nötig!
3. Auslesen:
- auf der HTML-Seite: <img src="image.php?id=...">
- image.php:
//Bilddaten und Mime-Typ auslesen
$res=mysql_query("select bilddaten, mimetype from bilder
where id=$_REQUEST[id]");
list($daten, $mime)=mysql_fetch_row($res);
// Ausgabe
header("Content-Type: $mime\n");
echo $daten;