Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 2 Gast/Gäste
Fotoanzeige
#1
Hi,
Ich habe vor, meine Bilder als php-Datei auszugeben und durch die GET-Parameter das Foto auszulesen. Das ganze funktioniert auch.

PHP-Code:
Header("Content-Type: " $picheader "");
$handle fopen($picname"r");
$content=fread ($handlefilesize ($picname));
fclose($handle);
echo 
$content

Die Variablen werden vorher aus meiner DB ausgelesen.

Problem ist nur, ich will die Bilder auch vor Zugriff schützen. Das heißt, nur User die gewisse Berechtigungen haben dürfen die angucken. Nun meine Frage, wie setze ich das am besten um, da ja vor dem Header keine Ausgabe folgen darf, mein Script aber Ausgaben produziert.

Würde mich über Hilfe freuen.
Zitieren
#2
Da gibt es verschiedene Ansätze.
Erst einmal musst du klären, was du denen anzeigen willst, die über keine ausreichende Berechtigung verfügen.
Am besten würde sich dort natürlich auch ein Bild anbieten Wink
Das könnte ggf. ein "default"-Bild sein, dass immer angezeigt würde, wenn irgendwas schief gelaufen ist. (Kein Bild gefunden, Fehler bei der Verarbeitung, ...)

Als zweites wäre es dann für deinen Fall das beste, wenn du auch die Bilder selbst in die Datenbank speicherst (als BLOB). Wichtig ist dabei, dass du auch nötige meta-informationen, wie Bildname, und vor allem dem MIME-Type mitspeicherst. Die Dimensionen (Höhe, Breite) wären auch ganz gut, sowie die Dateigröße in Byte.
Allerdings musst du dir dabei darüber im klaren sein, dass deine Datenbank massiv größer wird, dafür wird allerdings dein Filesystem geschont und du hast alle Vorteile einer Datenbank (Filtern nach beliebigen Kriterien, sortieren, zusätzliche Informationen hinzufügen ...)

Das ganze hat leider auch Nachteile:
1. Datenbankzugriffe erhöhen sich stark. Nach Möglichkeit solltest du versuchen alle benötigten Bilder für eine Seite mit einem Statement abzugreifen.
2. Wenn die Datenbank futsch ist, war es das mit den Bildern. Ein Filesystem lässt sich zumindest häppchenweise meist bei einem ungewollten Schaden wiederherstellen, bei einer Datenbank sieht das teilweise anders aus.

Für das zweite Problem gibt es aber auch einen Lösungsansatz von mir: Schaffe dir parallel einen .htaccess geschützten Ordner, in denen du die Originale speicherst. In dem Fall, das etwas mit der DB schief läuft, müsstest du "nur" diese Dateien wieder importieren.


MfG
Raphael
Zitieren