Thema: Bild aus Datenbank laden
-
26.05.2014, 18:51 #1
Bild aus Datenbank laden
Hallo!
Das ist mein erster Post, da ich Probleme eigentlich immer über die Forumssuche lösen konnte. Nun verlässt mich das Glück.
Ich habe zwei Systeme. Zuhause einen XAMPP mit Apache/PHP5.5/MySQL als Testsystem und bei Hetzner Webhosting ebenfalls mit Apache/PHP5.5/MySQL
Ich möchte ein Bild (jpeg) automatisch croppen und mit Wasserzeichen versehen, anschließend wird es Base64_Encoded und in ein longblob-feld in die Datenbank geschrieben. - Auf dem Testsystem klappt alles. Dieses Testscript gibt das bild auch aus:
PHP-Code:<?php
header("Content-type: image/jpeg");
require_once ('./dbconnect.php');
$strQuery= "SELECT *
FROM `images`
WHERE id=".$_GET['id'];
$result=@mysql_query($strQuery);
$row=@mysql_fetch_assoc($result);
echo base64_decode($row['imgdata']);
?>
Lässt man bei beiden Systemen den Header weg und vergleicht die Stringrepräsentationen sind beide Datensätze jeweils identisch. Sowohl Base64 Encoded als auch Decoded.
Wo liegt hier der Fehler? Irgendwas mit dem Zeichensatz?
Habe bereits unterschiedliche Bilder probiert 200kb bis 1Mb, Errorreporting E_ALL und Diverse Header.
hier der Code zum speichern der Bilder: (klappt auf beiden Systemen)
PHP-Code:$type = 'image/jpeg';
$hndFile = fopen($dirname.'/'.$foto , "r");
$data = base64_encode(resize(fread($hndFile, filesize($dirname.'/'.$foto))));
$strQuery = "INSERT INTO images
(imgdata,imgtype, AccountID) VALUES
('$data','$type', '$id')" ;
if (!mysql_query( $strQuery)) {
die(mysql_error());
}
-
26.05.2014, 19:28 #2
- Registriert seit
- 15.11.2011
- Beiträge
- 7.821
- Blog Entries
- 5
Thanked 9.354 Times in 3.194 PostsAW: Bild aus Datenbank laden
Warum denn überhaupt Base64? Das verursacht Overhead und ist daher imho hier nicht sinnvoll. Base64 ist gut um kleine Grafiken in ein Stylesheet zu packen, da man so die Anzahl an HTTP-Anfragen reduziert. Der Overhead durch Base64 ist hier minimal, wenn er nicht durch den so vermiedenen Overhead der zusätzlichen HTTP-Verbindung ausgeglichen wird.
Ich würde mir an deiner Stelle aber erst mal grundsätzlich die Frage stellen, ob es sinnvoll ist deine Bilder in eine Datenbank zu packen. Hat Vor- und Nachteile. Der Haupt-Vorteil ist, dass sich alle Daten zentral an einer Stelle befinden, sofern es noch weitere Daten gibt wie Texte, Meta-Infos zu den Bildern etc. die ebenfalls in die DB kommen. Effektiv ist das ganze aber rechenintensiver und damit langsamer, da bei jedem Aufruf eines Bildes die Last an den MySQL-Server und an PHP geht. Würdest du die Bilder alternativ statisch auf dem Dateisystem speichern, fällt im idealfall beides weg. Je nachdem was du konkret vor hast.
Wenn du sie tatsächlich in der Datenbank speichern willst, würde ich das binär machen. Beispielcode dazu findest du etwa hier: Bilder in MySQL-Datenbank speichern | Patrick Gotthard
Noch ein paar Worte generell zu den von dir geposteten Codeausschnitten:
PHP-Code:$strQuery= "SELECT *
FROM `images`
WHERE id=".$_GET['id'];
PHP-Code:$result=@mysql_query($strQuery);
Desweiteren sollte mysql nicht mehr benutzt werden da veraltet, stattdessen lieber mysqli verwenden. Und ich würde nicht direkt die mysql(i)-Funktionen verwenden sondern stattdessen eine Datenbankklasse als Wrapper, ist flexibler. Wenn dir das klar ist und das nur ein paar Zeilen zu Testzwecken sind die so nicht produktiv eingesetzt werden sollen, kannst du das natürlich ignorieren.
Ähnliche Themen
-
Datenbank viel zu groß?
Von Entrafiz im Forum PHPAntworten: 7Letzter Beitrag: 23.11.2012, 13:52 -
YouTube Videos laden nicht, weißes Bild?!
Von Devon im Forum Internet und TechnikAntworten: 5Letzter Beitrag: 11.03.2012, 02:14 -
Datenbank Error
Von Killerspider im Forum SupportAntworten: 1Letzter Beitrag: 21.02.2012, 17:06
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.