PaSt: /PHP Bildergalerie mit Zusatzinfos

Guten Abend!

Bei einem kleinen Projekt soll ich eine Bildergalerie erstellen.

Für die Datenhandhabung ergeben sich für mich folgende Varianten.

Variante A

Bild als Datei in (Album)-Ordner.
Zusatzinformationen im Exifformat.

Vorteil:

  • Zusatzinfos sind direkt mit Bild verknüpft.

Nachteil:

  • Unschönheit bezüglich Zeichencodierung Exif und UTF-8
  • Anpassung der Exifdaten nur "offline" in Bildbearbeitungsprogramm möglich.

Variante B

Bild als Datei in (Album)-Ordner.
Zusatzinformationen in (SQL)-Datenbank.

Vorteil:

  • "Keine" Einschränkungen der Zusatzinformationen (Länge, Anzahl und dgl)

Nachteil:

  • Zusätzliche Datenquelle
  • Eindeutige Zuordnung zwischen Zusatzinfos und Bild muss gewährleistet werden (Bsp wenn zwei Bilder gleich benannt sind)

Variante C

Alle Daten in SQL-Datenbank. Bild als BLOB. Hier hab ich aber keine Erfahrung. Was heisst das bezüglich Performance

Vorteil:

  • Alle Daten sind fest miteinander Verknüpft.
  • Onlineanpassungen problemlos möglich.

Nachteil:

  • ?

Was habt ihr da so für Erfahrungen gemacht?

Grüsse

  1. Hi,

    Variante A

    Bild als Datei in (Album)-Ordner.
    Zusatzinformationen im Exifformat.

    Weiterer Nachteil: PHP muss jedes Bild bei jeder Auslieferung öffnen und die Daten rauslesen.

    Variante B

    Bild als Datei in (Album)-Ordner.
    Zusatzinformationen in (SQL)-Datenbank.

    Way to go.

    Nachteil:

    • Zusätzliche Datenquelle

    Wieso soll das ein Nachteil sein?

    • Eindeutige Zuordnung zwischen Zusatzinfos und Bild muss gewährleistet werden (Bsp wenn zwei Bilder gleich benannt sind)

    Inkl. des Pfades können sie gar nicht gleich benannt sein.

    Variante C

    Alle Daten in SQL-Datenbank. Bild als BLOB.

    Wird allgemein als die schlechteste Variante bewertet.

    Insb. was BackUps/Dumps angeht sehr schlecht,
    auch die Verbindung PHP <-> DB kann schnell zum Engpass werden, wenn da bei jedem Seitenabruf mehrere fette Bilder durchgequetscht werden,
    und ums Caching musst du dich dann auch noch selber kümmern, was bei Ablage im Dateisystem iaR. der Webserver schon automatisch für dich übernehmen kann.

    MfG ChrisB

    --
    The most exciting phrase to hear in science, the one that heralds new discoveries, is not “Eureka!” but “That's funny...” [Isaac Asimov]
    1. Grüss dich ChrisB

      Variante B

      Bild als Datei in (Album)-Ordner.
      Zusatzinformationen in (SQL)-Datenbank.

      Way to go.

      Danke für den Kommentar. So werd ichs wohl machen!

      Mein Datenbanklayout wird ungefähr so aussehen:
      Tabelle Album
      album_id (INT) | bezeichnug (VARCHAR) | position (INT/NULL) | sichtbar (INT 0/1) ->BOOL

      Tabelle Bilder
      bild_id (INT) | album_id (INT) | pfad (VARCHAR) | kommentar (TEXT) | position (INT/NULL) | sichtbar (INT 0/1) ->BOOL

      ich glaube so sollten redundanzen ausgeschlossen sein.

      Ordnerstruktur:
      /#ALBUM_NR#/#BILDNAME#

      grüsse

      1. Hi,

        Tabelle Album
        album_id (INT) | bezeichnug (VARCHAR) | position (INT/NULL) | sichtbar (INT 0/1) ->BOOL

        Tabelle Bilder
        bild_id (INT) | album_id (INT) | pfad (VARCHAR) | kommentar (TEXT) | position (INT/NULL) | sichtbar (INT 0/1) ->BOOL

        ich glaube so sollten redundanzen ausgeschlossen sein.

        Ordnerstruktur:
        /#ALBUM_NR#/#BILDNAME#

        Wenn #ALBUM_NR# an der Stelle mit der album_id aus der Tabelle Bilder identisch ist - dann ist das Feld pfad in dieser Tabelle doch sehr wohl redundant.

        MfG ChrisB

        --
        The most exciting phrase to hear in science, the one that heralds new discoveries, is not “Eureka!” but “That's funny...” [Isaac Asimov]
        1. Hi

          Wenn #ALBUM_NR# an der Stelle mit der album_id aus der Tabelle Bilder identisch ist - dann ist das Feld pfad in dieser Tabelle doch sehr wohl redundant.

          hmm, stimmt natürlich.

          Tabelle Album
          album_id (INT) | bezeichnug (VARCHAR) | position (INT/NULL) | sichtbar (INT 0/1) ->BOOL

          Tabelle Bilder
          bild_id (INT) | album_id (INT) | dateiname (VARCHAR) | titel (VARCHAR) | kommentar (TEXT) | position (INT/NULL) | sichtbar (INT 0/1) ->BOOL

          so kann ich aus album_id und dateiname auf den Pfad schliessen (#ALBUM_ID#/#DATEINAME#).
          super, danke.

          grüsse

          1. Mahlzeit PaSt,

            kleine ketzerische Frage:

            Tabelle Bilder
            bild_id (INT) | album_id (INT) | dateiname (VARCHAR) | titel (VARCHAR) | kommentar (TEXT) | position (INT/NULL) | sichtbar (INT 0/1) ->BOOL

            so kann ich aus album_id und dateiname auf den Pfad schliessen (#ALBUM_ID#/#DATEINAME#).

            Warum überhaupt eine Spalte "dateiname"? album_id und bild_id sind auch eindeutig und Du könntest daraus einen Pfad #ALBUM_ID#/#BILD_ID# gewinnen - und die Bilder natürlich entsprechend benennen. Weiterer Vorteil: Du musst Dich nicht mit Sonderzeichen im Dateinamen herumärgern.

            MfG,
            EKKi

            --
            sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
            1. Grüss dich EKKi

              Warum überhaupt eine Spalte "dateiname"? album_id und bild_id sind auch eindeutig und Du könntest daraus einen Pfad #ALBUM_ID#/#BILD_ID# gewinnen - und die Bilder natürlich entsprechend benennen. Weiterer Vorteil: Du musst Dich nicht mit Sonderzeichen im Dateinamen herumärgern.

              Das hab ich mir auch überlegt. Die Frage stellte sich ob ich die Bilder nach dem Upload mit einer uniqid() ausstatte (Bsp Bild_4b3403665fea6.jpg). Ich fand aber, dass "echte/wahre" Dateinamen schöner respektive ausagekräftiger sind.
              Mich persönlich nervt es meistens, wenn ich eine Datei mit nichtssagendem Dateiname runterlade.
              Aber die Vorteile sind für die serverseitige Logik klar ersichtlich:

              • keine echten Ordner mehr nötig für die Alben, da jedes Bild ja ne eindeutigen Namen besitzt.
              • Sonderzeichen entfallen usw

              Nun weiss ich noch nicht genau wie ichs handhaben soll.

              grüsse

            2. Hello,

              Warum überhaupt eine Spalte "dateiname"?

              Oft möchte man doch einen Bezug zum Namen des Bildes auf dem Client behalten. Da ist eine Spalte "Dateiname", die ja genau diesen Dateinamen auf dem Client beinhalten könnte, doch sinnvoll, oder?

              Bei erneutem Hochladen könnte man so kontrollieren lassen, ob es schon ein gleichnamiges Bild gibt. Außerdem wäre dies auch beim Wiederherunterladen von Vorteil.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de