Bilder in Datenbank

Bilder in Datenbank

am 12.12.2004 16:41:00 von Anita Meyer

Hallo,

ich habe in einer Datenbank Bilder (binär gespeichert), die ich mit einem
Skript abrufe. Ist es möglich, dass beim Speichern eines sochen Bildes ein
anderer Dateiname als der Skriptname ausgegeben wird - also statt
getimage.php.jpeg foto3.jpg?

Beste Grüße
--
Anita Meyer
anita.meyer@aon.at

Re: Bilder in Datenbank

am 12.12.2004 16:49:56 von Markus Malkusch

Anita Meyer:

> ich habe in einer Datenbank Bilder (binär gespeichert)

Wieso, was versprichst Du Dir davon?

> Ist es möglich, dass beim Speichern eines sochen Bildes ein
> anderer Dateiname als der Skriptname ausgegeben wird - also statt
> getimage.php.jpeg foto3.jpg?

Du kannst Deinem Webserver sagen, dass er auch .jpg durch PHP jagen soll.
Das machst Du analog dazu wie Du Deinem Webserver .php beigebracht hast.
Aber ich bin mir nicht sicher ob das Deine Frage beantwortet, weil ehrlich
gesagt habe ich sie nicht verstanden.
--
- Whoisabfrage

Re: Bilder in Datenbank

am 12.12.2004 20:07:58 von Johannes Vogel

Hi Anita

Anita Meyer wrote:
> ich habe in einer Datenbank Bilder (binär gespeichert), die ich mit einem

16.3. Ist es sinnvoll, Bilder in einer Datenbank abzulegen?
http://www.php-faq.de/q/q-db-blob.html

> Skript abrufe. Ist es möglich, dass beim Speichern eines sochen Bildes ein
> anderer Dateiname als der Skriptname ausgegeben wird - also statt
> getimage.php.jpeg foto3.jpg?

http://www.host.gov/getimage.php/foto3.jpg

Ausserdem die Headers richtig setzen. IE kann's nicht, andere bestimmen
aus dem Header den potentiellen Filename.

HTH, Johannes

Re: Bilder in Datenbank

am 13.12.2004 14:29:11 von Anita Meyer

Markus Malkusch wrote:

> Anita Meyer:
>
>> ich habe in einer Datenbank Bilder (binär gespeichert)
>
> Wieso, was versprichst Du Dir davon?

Es gibt keine Probleme mit Broken Links. Außerdem ist es meiner Meinung nach
praktischer den Stream zu bearbeiten (zB. für Vorschau ein kleineres Bild
auszugeben).

>> Ist es möglich, dass beim Speichern eines sochen Bildes ein
>> anderer Dateiname als der Skriptname ausgegeben wird - also statt
>> getimage.php.jpeg foto3.jpg?
>
> Du kannst Deinem Webserver sagen, dass er auch .jpg durch PHP jagen soll.
> Das machst Du analog dazu wie Du Deinem Webserver .php beigebracht hast.
> Aber ich bin mir nicht sicher ob das Deine Frage beantwortet, weil ehrlich
> gesagt habe ich sie nicht verstanden.

Zum Auslesen aus der Datenbank wird getimage.php aufgerufen. Wenn man das
angezeigte Bild abspeichern will, wird es immer unter dem Namen
getimage.php.jpeg abgespeichert. Mir wäre es aber lieber wenn man es unter
einem anderem Namen (der zB. auch in der Datenbank liegt) gespeichert
würde, damit man nicht auf Anhieb sieht, dass die Bilder aus einer
Datenbank kommen. Es soll halt immer ein anderer Name angegeben werden,
obwohl immer das gleiche Skript aufgerufen wird.

Beste Grüße

--
Anita Meyer
anita.meyer@aon.at

Re: Bilder in Datenbank

am 13.12.2004 14:30:58 von Anita Meyer

Johannes Vogel wrote:

> Hi Anita
>
> Anita Meyer wrote:
>> ich habe in einer Datenbank Bilder (binär gespeichert), die ich mit einem
>
> 16.3. Ist es sinnvoll, Bilder in einer Datenbank abzulegen?
> http://www.php-faq.de/q/q-db-blob.html

Ich kenne die Nachteile schon, nehme sie jedoch in Kauf.

>> Skript abrufe. Ist es möglich, dass beim Speichern eines sochen Bildes
>> ein anderer Dateiname als der Skriptname ausgegeben wird - also statt
>> getimage.php.jpeg foto3.jpg?
>
> http://www.host.gov/getimage.php/foto3.jpg
>
Stimmt diese Adresse? Sie ist nämlich nicht erreichbar.

Beste Grüße
--
Anita Meyer
anita.meyer@aon.at

Re: Bilder in Datenbank

am 13.12.2004 14:41:24 von Tobias Kutzler

Anita Meyer wrote:
> Zum Auslesen aus der Datenbank wird getimage.php aufgerufen. Wenn man das
> angezeigte Bild abspeichern will, wird es immer unter dem Namen
> getimage.php.jpeg abgespeichert. Mir wäre es aber lieber wenn man es unter
> einem anderem Namen (der zB. auch in der Datenbank liegt) gespeichert
> würde, damit man nicht auf Anhieb sieht, dass die Bilder aus einer
> Datenbank kommen. Es soll halt immer ein anderer Name angegeben werden,
> obwohl immer das gleiche Skript aufgerufen wird.

Dann versuch mal folgendes:

header("Content-type: image/[*]");
header("Filename: ".$filename);

- [*] bitte mit dem entsprechen den Type ersetzen! (jpg, gif, png)
- $filename enthält den gewünschten Namen (evtl. aus der DB - vielleicht
aus der ID oder ähnlichem erzeugt)

So hab ich in meiner Thumbnailklasse kleine Vorschaubilder ausgeben
lassen und beim Speichern wird mir der richtige Name angegeben, obwohl
mir eigentlich eine PHP Datei das Bild erzeugt hat.

>
> Beste Grüße
>

HTH,
Tobias

Re: Bilder in Datenbank

am 13.12.2004 15:08:43 von Christoph Hermann

Tobias Kutzler schrieb:

Moin,

>> Zum Auslesen aus der Datenbank wird getimage.php aufgerufen. Wenn man das
>> angezeigte Bild abspeichern will, wird es immer unter dem Namen
>> getimage.php.jpeg abgespeichert. Mir wäre es aber lieber wenn man es
>> unter einem anderem Namen (der zB. auch in der Datenbank liegt)
>> gespeichert würde, damit man nicht auf Anhieb sieht, dass die Bilder aus
>> einer Datenbank kommen. Es soll halt immer ein anderer Name angegeben
>> werden, obwohl immer das gleiche Skript aufgerufen wird.
>
> Dann versuch mal folgendes:
>
> header("Content-type: image/[*]");
> header("Filename: ".$filename);
>
> - [*] bitte mit dem entsprechen den Type ersetzen! (jpg, gif, png)
> - $filename enthält den gewünschten Namen (evtl. aus der DB - vielleicht
> aus der ID oder ähnlichem erzeugt)
>
> So hab ich in meiner Thumbnailklasse kleine Vorschaubilder ausgeben
> lassen und beim Speichern wird mir der richtige Name angegeben, obwohl
> mir eigentlich eine PHP Datei das Bild erzeugt hat.

So mache ich das auch, zusätzlich verwende ich mod_rewrite.

so habe ich z.b. einen Link /RW/bild/id/12345/bla.JPG

in /RW/ liegt eine .htaccess mit den mod_rewrite anweisungen die das in
getimage.php?id=12345 umschreibt.

HTH
Christoph

Re: Bilder in Datenbank

am 13.12.2004 16:03:43 von Michael Fesser

.oO(Anita Meyer)

>Johannes Vogel wrote:
>
>> 16.3. Ist es sinnvoll, Bilder in einer Datenbank abzulegen?
>> http://www.php-faq.de/q/q-db-blob.html
>
>Ich kenne die Nachteile schon, nehme sie jedoch in Kauf.

Was versprichst Du Dir davon? Es gibt nur in den wenigsten Fällen eine
wirkliche Rechtfertigung dafür, Bilder in die Datenbank zu packen.

Micha

Re: Bilder in Datenbank

am 13.12.2004 16:03:44 von Michael Fesser

.oO(Anita Meyer)

>Markus Malkusch wrote:
>
>> Anita Meyer:
>>
>>> ich habe in einer Datenbank Bilder (binär gespeichert)
>>
>> Wieso, was versprichst Du Dir davon?
>
>Es gibt keine Probleme mit Broken Links.

Gibt es bei vernünftiger Planung auch bei regulären Dateien nicht.

>Außerdem ist es meiner Meinung nach
>praktischer den Stream zu bearbeiten (zB. für Vorschau ein kleineres Bild
>auszugeben).

Wo ist da der Unterschied, ob ich ein Bild aus der Datenbank oder aus
einer Datei lese? Irgendwoher müssen die Daten ja schließlich kommen,
bevor ein Skript sie verarbeiten kann.

Evtl. auch mal lesenswert:

Die Vorteile von Bildern in der Datenbank spielen nur unter sehr
ungewöhnlichen Umständen eine Rolle, zumeist überwiegen die Nachteile.
Und zwar deutlich.

Micha

Re: Bilder in Datenbank

am 13.12.2004 17:00:10 von Anita Meyer

Michael Fesser wrote:

> .oO(Anita Meyer)
>
>>Markus Malkusch wrote:
>>
>>> Anita Meyer:
>>>
>>>> ich habe in einer Datenbank Bilder (binär gespeichert)
>>>
>>> Wieso, was versprichst Du Dir davon?
>>
>>Es gibt keine Probleme mit Broken Links.
>
> Gibt es bei vernünftiger Planung auch bei regulären Dateien nicht.

Genau das war mir aber zu viel Aufwand. Wenn ich nämlich zwei Datensätze mit
dem selben Bild hinzufüge müsste ich ja dann auch noch merken, wie oft das
Bild gespeichert ist und es nur löschen, wenn kein Datensatz mehr darauf
zeigt. Das nächste Problem war dann mit Dateien, die gleich heißen, aber
unterschiedlich sind. Und das Bild nur unter einer eindeutigen ID zu
speichern hat mir auch nicht gefallen.

> Wo ist da der Unterschied, ob ich ein Bild aus der Datenbank oder aus
> einer Datei lese? Irgendwoher müssen die Daten ja schließlich kommen,
> bevor ein Skript sie verarbeiten kann.

Das stimmt schon, ich habe es allerdings mit der Datenbank praktischer
gefunden. Und dass die Datenbank so groß wird, stimmt auch nicht - es sind
nur 4 MByte bei 120 Einträgen.

>
> Evtl. auch mal lesenswert:
>
> Die Vorteile von Bildern in der Datenbank spielen nur unter sehr
> ungewöhnlichen Umständen eine Rolle, zumeist überwiegen die Nachteile.
> Und zwar deutlich.

Das ist eine Frage der Gewichtung.

Beste Grüße
--
Anita Meyer
anita.meyer@aon.at

Re: Bilder in Datenbank

am 13.12.2004 17:16:27 von Markus Malkusch

Anita Meyer:

> Genau das war mir aber zu viel Aufwand. Wenn ich nämlich zwei Datensätze
> mit dem selben Bild hinzufüge müsste ich ja dann auch noch merken, wie oft
> das Bild gespeichert ist und es nur löschen, wenn kein Datensatz mehr
> darauf zeigt.

Willst Du damit sagen, dass Du mit ON DELETE CASCADE arbeitest? Ansonsten
musst Du genauso selber prüfen ob noch Datensätze auf Deine Bildrelation
zeigen. BTW. diese Prüfung ist ja sowas von aufwändig.

> Das nächste Problem war dann mit Dateien, die gleich heißen,
> aber unterschiedlich sind. Und das Bild nur unter einer eindeutigen ID zu
> speichern hat mir auch nicht gefallen.

Öhm, Du speicherst es in Deiner Bildrelation auch unter einer eindeutigen
ID, wo ist da der Vorteil?

Aber wenn Du meinst dass es zuviel Aufwand ist die Bilder im FS zu
speichern, dann ist's wohl Geschmacksache. Mir persönlich ist der Aufwand
ein Bild zu bearbeiten und sich auch noch um korrekte Header zu kümmern so
das ein UA vernünftig /cachen/ kann enorm zu groß.
--
- Kontonummerprüfung mit PHP

Re: Bilder in Datenbank

am 13.12.2004 17:58:11 von Markus Malkusch

Tobias Kutzler:

> header("Filename: ".$filename);

Den Header gibt's nicht.

Jetzt hab' aber auch ich endlich verstanden was OP will: mod_rewrite
--
- Whoisabfrage

Re: Bilder in Datenbank

am 13.12.2004 17:58:18 von Anita Meyer

Tobias Kutzler wrote:
> Dann versuch mal folgendes:
>
> header("Content-type: image/[*]");
> header("Filename: ".$filename);
>

Vielen Dank,

es hat bei mir zwar nicht wie beschrieben funktioniert, mit

header("Content-type: image/jpeg");
header("Content-Disposition: attachment; filename=" . $filename);

hat es dann aber geklappt.

Beste Grüße
--
Anita Meyer
anita.meyer@aon.at

Re: Bilder in Datenbank

am 13.12.2004 18:13:04 von Anita Meyer

> Öhm, Du speicherst es in Deiner Bildrelation auch unter einer eindeutigen
> ID, wo ist da der Vorteil?
>

Ich habe keine Bildrelation, sondern ich habe Text und Bild in einer Tabelle
gespeichert. Eine 1:1-Beziehung habe ich mir verkniffen.

> Aber wenn Du meinst dass es zuviel Aufwand ist die Bilder im FS zu
> speichern, dann ist's wohl Geschmacksache.

Das ist ja besonders nett ausgedrückt. Ich wollte nicht dass ein normaler
User Dateien ins Filesystem des Servers schreiben kann - wenn auch nur
indirekt.

Beste Grüße
--
Anita Meyer
anita.meyer@aon.at

Re: Bilder in Datenbank

am 13.12.2004 18:29:25 von Markus Malkusch

Anita Meyer:

> Ich habe keine Bildrelation

Doch!

> Ich wollte nicht dass ein normaler User Dateien ins Filesystem des Servers
> schreiben kann - wenn auch nur indirekt.

Und das wäre ein Problem, weil?
--
- Whoisabfrage

Re: Bilder in Datenbank

am 13.12.2004 19:21:45 von Michael Fesser

.oO(Anita Meyer)

>> Öhm, Du speicherst es in Deiner Bildrelation auch unter einer eindeutigen
>> ID, wo ist da der Vorteil?
>>
>Ich habe keine Bildrelation, sondern ich habe Text und Bild in einer Tabelle
>gespeichert. Eine 1:1-Beziehung habe ich mir verkniffen.

Was machst Du, wenn Du ein und dasselbe Bild mehrfach verwenden willst?
Mehrfach speichern oder in eine extra Tabelle auslagern?

>> Aber wenn Du meinst dass es zuviel Aufwand ist die Bilder im FS zu
>> speichern, dann ist's wohl Geschmacksache.
>
>Das ist ja besonders nett ausgedrückt. Ich wollte nicht dass ein normaler
>User Dateien ins Filesystem des Servers schreiben kann - wenn auch nur
>indirekt.

Ob nun in die Datenbank oder ins Dateisystem - was macht das in diesem
Fall für einen Unterschied?

Micha

Re: Bilder in Datenbank

am 13.12.2004 20:03:15 von Johannes Vogel

Hi Anita

Anita Meyer wrote:
> Tobias Kutzler wrote:
>>Dann versuch mal folgendes:
>>header("Content-type: image/[*]");
>>header("Filename: ".$filename);
> Vielen Dank,
> es hat bei mir zwar nicht wie beschrieben funktioniert, mit
> header("Content-type: image/jpeg");
> header("Content-Disposition: attachment; filename=" . $filename);
> hat es dann aber geklappt.

Also gemäss der PHP FAQ?

SCNR; Johannes

Re: Bilder in Datenbank

am 13.12.2004 20:05:19 von Johannes Vogel

Hi Michael

Michael Fesser wrote:
> .oO(Anita Meyer)
>>>Aber wenn Du meinst dass es zuviel Aufwand ist die Bilder im FS zu
>>>speichern, dann ist's wohl Geschmacksache.
>>Das ist ja besonders nett ausgedrückt. Ich wollte nicht dass ein normaler
>>User Dateien ins Filesystem des Servers schreiben kann - wenn auch nur
>>indirekt.
> Ob nun in die Datenbank oder ins Dateisystem - was macht das in diesem
> Fall für einen Unterschied?

Es macht einen Unterschied. Aber eben, wie du's meinst, zugunsten der
Filesystem-Methode.

Grüess, Johannes

Re: Bilder in Datenbank

am 13.12.2004 20:10:12 von Anita Meyer

Michael Fesser wrote:

> Was machst Du, wenn Du ein und dasselbe Bild mehrfach verwenden willst?
> Mehrfach speichern oder in eine extra Tabelle auslagern?

Das kommt mit hoher Wahrscheinlichkeit nicht vor. Und wenn doch eines von
100 Bildern doppelt gespeichert wird - na und, dann ist die Datenbank halt
um 10 kByte größer als sie sein müsste - das stört mich überhaupt nicht?
Ich habe so ohne Aufwand garantiert kein Problem mit Inkonsistenzen, und
ich muss mir beim Löschen keine Gedanken machen, ob es sich negativ auf
einen anderen Datensatz auswirkt.

Wenn ich eine Problemstellung hätte, wo ich das gleiche Bild oft brauche,
würde ich die Bilder wahrscheinlich direkt ins Filesystem schreiben und
halt die Anzahl der Verweise mitzählen, aber das ist eine andere
Geschichte...

>
> Ob nun in die Datenbank oder ins Dateisystem - was macht das in diesem
> Fall für einen Unterschied?
>

Mich stört es nicht, wenn jemand in die Datenbank schreiben kann, ins
Dateisystem stört es mich persönlich mehr.

Beste Grüße
--
Anita Meyer
anita.meyer@aon.at

Re: Bilder in Datenbank

am 13.12.2004 20:13:13 von Anita Meyer

Johannes Vogel wrote:


> Also gemäss der PHP FAQ?

exakt - ich habe allerdings vorher dummerweise nicht daran gedacht, nach
header() zu suchen (und das, obwohl ich bei Email-Anhängen genau diesen
Header schon vorher einmal benutzt hatte).

Beste Grüße
--
Anita Meyer
anita.meyer@aon.at