[php] geschütze Bilder anzeigen

Frostbeule2k

Ensign
Dabei seit
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
 
C

claW.

Gast
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.
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.
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.
 

Frostbeule2k

Ensign
Ersteller dieses Themas
Dabei seit
Feb. 2006
Beiträge
223
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!?
 

HansDampf38

Lt. Junior Grade
Dabei seit
Jan. 2008
Beiträge
381
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
 

Frostbeule2k

Ensign
Ersteller dieses Themas
Dabei seit
Feb. 2006
Beiträge
223
Aha... und wie greifst du auf die Bilder dann effektiv zu? Habe das noch nicht richtig verstanden...
 

HansDampf38

Lt. Junior Grade
Dabei seit
Jan. 2008
Beiträge
381
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
 

Frostbeule2k

Ensign
Ersteller dieses Themas
Dabei seit
Feb. 2006
Beiträge
223
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ß
 

cx01

Ensign
Dabei seit
Mai 2010
Beiträge
241
Dein Bilder-Skript kann doch einfach prüfen, ob der User eingeloggt ist (Cookies), oder seh ich das falsch?
 

HansDampf38

Lt. Junior Grade
Dabei seit
Jan. 2008
Beiträge
381
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
 
C

claW.

Gast
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.
 

Frostbeule2k

Ensign
Ersteller dieses Themas
Dabei seit
Feb. 2006
Beiträge
223
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);
}
 

Hancock

Captain
Dabei seit
Nov. 2007
Beiträge
3.381
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"
 

Frostbeule2k

Ensign
Ersteller dieses Themas
Dabei seit
Feb. 2006
Beiträge
223
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:

HansDampf38

Lt. Junior Grade
Dabei seit
Jan. 2008
Beiträge
381
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
 

Frostbeule2k

Ensign
Ersteller dieses Themas
Dabei seit
Feb. 2006
Beiträge
223
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.
 

HansDampf38

Lt. Junior Grade
Dabei seit
Jan. 2008
Beiträge
381
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
 

Frostbeule2k

Ensign
Ersteller dieses Themas
Dabei seit
Feb. 2006
Beiträge
223
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.
 
Top