[php] geschütze Bilder anzeigen

Frostbeule2k

Ensign
Registriert
Feb. 2006
Beiträge
223
Hallo,

trotz langer suche bin ich noch nicht auf eine Lösung für mein Problem gekommen und hoffe nun auf euch ;)

Problem:
Ich habe eine Bildergallerie welche sich in zwei Kategorien aufteilt - Privat und Öffentlich. Die Privaten Bilder sollen erst nach erfolgreicher Anmeldung sichtbar sein. Nur wie verwirkliche ich das!? Momentan habe ich die Bilder mit .htaccess geschützt. PHP kann darauf zugreifen und "teilweiße" ausgeben.
Ich hatte einen Lösungsansatz der wie folgt aussah:
Bild.php
PHP:
<img src="loader.php">
loader.php
PHP:
header("Content-type: image/jpeg");
readfile("test.jpg");

Die bild.php hat die loader.php aufgerufen welche das Bild ausliest. Problem Nr 1 davon ist das man keine if schleifen etc. verwenden kann um die Berechtigung zu prüfen (ansonsten könnte man das bild einfach aufrufen in dem man direkt auf die loader.php zugreift). Problem Nr 2 es funtkioniert nicht im Internet Explorer. Problem Nr 3 ich müsste der loader.php mittels GET verschiedene Bilder übermitteln können was aber nicht geht.

Habt ihr noch einen Lösungsansatz für dieses Problem!?

Gruß Frostbeule2k
 
Frostbeule2k schrieb:
Problem Nr 1 davon ist das man keine if schleifen etc. verwenden kann um die Berechtigung zu prüfen (ansonsten könnte man das bild einfach aufrufen in dem man direkt auf die loader.php zugreift).
1. es gibt keine if-schleifen.
Frostbeule2k schrieb:
Problem Nr 2 es funtkioniert nicht im Internet Explorer.
php is ne serverseitige scriptsprache, also hat das nix mit dem internet explorer per se zu tun. du musst die daten nur konform ausliefern, dann läufts in jedem browser.
Frostbeule2k schrieb:
Problem Nr 3 ich müsste der loader.php mittels GET verschiedene Bilder übermitteln können was aber nicht geht.
dann machst du was falsch oder du musst dein script besser anpassen. bildern kann man immer parameter übergeben. wie sieht denn dein aktueller weg aus? der code zur auslieferung nützt uns ja nix.
HTML:
<img src="imageloader.php?file=pfad/zum/bild.jpg" />
funktioniert genauso, du musst sie halt lediglich korrekt als bild ausliefern.
 
Wie der Internet Explorer zu PHP steht, d.h. das der IE auf Seiten des Clients ausgeführt wird und PHP eine Serverseitige Programmiersprache ist mir bekannt.
Das Script funktioniert leider trotdem nicht im IE.
Der Rest funktionierte im Firefox sonst soweit ganz gut. Gibt es eine Beispieldatei/Beispielcode der bei dir 100% im IE läuft!?
 
Hallo,
da ich gerade selbst einen Login-Bereich per PHP gebastelt habe... mir fehlt nur noch das was ich damit schützen will :D... tun sich mir die Frage auf, wieso du keine IF-Anfragen verwenden kannst ? Denn bei jeder Anmeldung ist doch die Kernfrage "Berechtigt ? Ja/Nein"... wie wolltest du dass denn testen ohne IF ?

Ansonsten habe ich es so gemacht:

Den entsprechenden Ordner per htaccess gesichert... hast du ja schon
Bei erfolgreicher Anmeldung habe ich nun ein Button mehr, der mich zur geschützen Seite bringt.

Das war schon alles.

Gruß

HD
 
Aha... und wie greifst du auf die Bilder dann effektiv zu? Habe das noch nicht richtig verstanden...
 
Das Stichwort heisst hier wohl "include".

Mit include kannst du per PHP auch auf eine Datei zugreifen die mit htaccess geschützt ist.

Sprich... Benutzer Ok --> include Datei xyz.php

Hoffe das hilft dir so weiter ?

Gruß

HD
 
Nein, das hilft mir leider immer noch nicht.
damit ich es richtig verstehe fasse ich mal kurz zusammen;
du hast einen Ordner welcher mit htaccess geschützt ist. Darin liegen Bilder. Wenn sich jemand einloggt bzw. sich authentifiziert hat dann kann der Benutzer auf einen Button klicken. Dieser Button verweißt auf eine Seite bzw. zieht sich eine Seite via include aus dem htaccess geschützen Ordners, richtig!? Und diese Seite enthält dann die Links auf die Bilder oder wie soll das funktionieren!?
Sollte dies der Fall sein muss ich leider sagen das das für mich nicht anwendbar ist. Ich habe eine Datenbank in welcher jedes Bild ein Datensatz hat in welchem die Galleriezuordnung etc. enthalten ist. Anhand des Datensatzes findet man die Datei im Dateisystem (der Ordner für die privaten Bilder ist mit htaccess geschützt).

Es muss doch eine "einfache" Lösung geben, immerhin gibt es genug Webapplikationen wie ein Forum oder Bildergallerien wie (Coppermine) welche Bilder erst nach Anmeldung "freischaltet"...!?

Gruß
 
Dein Bilder-Skript kann doch einfach prüfen, ob der User eingeloggt ist (Cookies), oder seh ich das falsch?
 
hmm... mit meinem Teil hast du schon recht, aber verstehe ich das bei dir so richtig:

Du hast eine Datenbank mit einer Tabelle und in der Tabelle ein Feld "In dem Ordner findest du das Bild" ?

Ich weiß nicht, ob mein Gedankengang nun funktionieren würde, aber könntest du ein weiteres Feld einfügen "Privat" ? Und dann über eine Abfrage(leider wieder nur If;) ) klären... ist das Bild privat ? Nein --> Darfst es nicht sehen, Ja --> Bild anzeigen

So das du garnicht über den Ordner gehst bei der Berechtigung, sondern in der Datenbank schon schaust ob privat oder nicht.

Gruß

HD
 
Frostbeule2k schrieb:
Der Rest funktionierte im Firefox sonst soweit ganz gut. Gibt es eine Beispieldatei/Beispielcode der bei dir 100% im IE läuft!?
PHP:
<?php

if( $_SESSION['group'] == 'pictures' )
{
  header( 'Content-type: image/jpg' );
  readfile( 'xyz.jpg' );
}
else echo 'Keinen Zugriff!';

?>
läuft in jedem browser, da php serverseitig verarbeitet wird und danach alles über den http server zum client wandert.
 
Anlügen tu ich dich nicht, das Script geht bei mir nicht im IE. Weder am Desktop PC noch am Notebook.
Habe das Problem jetzt ein wenig anders gelöst. Meine Bildloader Datei sieht jetzt wie folgt aus:
PHP:
if($_SESSION["login_status"] == "ok") {
	$file = $_GET["datei"];
	$image = imagecreatefromjpeg($file);
	header('Content-type:image/jpeg');
	imagejpeg($image);
}
 
Das tut aber ganz schön den Server bremsen. (Die image...-Funktionen sind schnarchlahm)
Im IE gehts nicht:
Keine Leerzeichen vor und nach <?php und ?>?
Keine Fehlermeldungen (IE sowie von PHP (und der IE zeigt sie nicht an, weil es ein Bild ist))
Wenns an der Dateiendung liegt -> "http:/...&endung=.jpg"
 
Hi,
ich habe jetzt noch einmal mehrere Bilder getestet und bin jetzt noch orientierungsloser. Manche Bilder funktionieren und manche nicht, es lässt sich allerdings kein direkter Anhaltspunkt finden warum manche Bilder nicht funktionieren. Weder der Dateiname noch die größe des Bildes gibt Aufschluss darauf wo der Fehler liegt

@ Blitzmerker: Das Script sollte soweit in Ordnung sein wenn manche Bilder funktionieren und manche nicht, oder!? Gibt es noch weitere Punkte bei denen ich schauen könnte?


EDIT: Ich habe mir die Bilder doch noch einmal genauer angeschaut. Ich glaube es liegt an der DPI Auflösung. Normale Bilder einer Kamera, welche eine Auflösung von 72 oder 96 DPI haben funktionieren. Eine im Photoshop erstellte Grafik mit einer Auflösung von 762 DPI funktinoiert nicht.
Gibt es eine möglichkeit mit PHP die DPI´s auszulesen? Dann könnte ich je nach DPI Zahl die Bilder anzeigen lassen oder nicht.
 
Zuletzt bearbeitet:
Schau dir das mal auf PHP.net an:

getimagesize

vielleicht hilft dir das weiter.

Spricht sonst was dagegen... sollte es wirklich an der dpi liegen... die Bilder einfach zu konvertieren ?

Sowas kannst du recht einfach mit

Xnview

machen.

Gruß

HD
 
Hängt mit der DPI Auflösung zusammen. Bilder welche größer sind als die bei welchen die DPI Auflösung bei 762 ist, allerdings die DPI Auflösung kleiner ist funktionieren (Hoffe man versteht den Satz ;) )... Konvertieren ist vom Prinzip nicht das Problem. Ich habe allerdings mehrere Benutzer welche Bilder hochladen dürfen und für diese möchte ich es so einfach wie möglich gestalten.
 
Habe das hier gerade gefunden:

Code:
function dpi_auslesen_jpg($datei) { 
   $fh = fopen($datei, 'r'); 
   $header = fread($fh, 16); 
   fclose($fh); 
   $aufloesung = unpack('x14/ndpi', $header); 
   return $aufloesung['dpi']; 
}

$wert = dpi_auslesen_jpg('bild.jpg');
echo $wert;

Und es funktioniert :D... aber nur mit JPG wohl.

Gruß

HD
 
Das ist ja cool, ich glaube dann werd ich meine FUnktion auf diese hier umbauen... dürfte ein bisschen weniger Serverlast benötigen ;)
Dankeschön.
 
Zurück
Oben