Moin!
Wollte mich auch wieder mal zu Wort melden. Dank der grossen Hilfe konnte ich mir selbst eine Lösung aus den vielen Ansätzen zusammenbasteln.
Naja, Lösung... ich weiß nicht so recht, deiner Lösung fehlt es am Essentiellen: Dem Zugriffsschutz für die, die die Bilder nicht sehen sollen.
Meine Gallery wird nun durch 2 Dateien geschützt. Die beiden Dateien liegen in einem frei zugänglichen Ordner, in welchem auch eine kleine Bildervorschau generiert ( Datei 1 ) wird ( Bilder sind 50 Pixel breits, daher fast nichts zu erkennen ) nun werden die Variablen an Datei 2 weitergegen welcher die die Bilder ausserhalb des Root Verzeichnis aufruft und anzeigt! Somit können die Bilder nur mit den beiden PHP Dateien angschaut werden. Perfekt!
Die Abwesenheit von Zugriffsschutz interessiert dich plötzlich nicht mehr?
Datei 1:
<?php
$fh = opendir("./");
Du öffnest das aktuelle Verzeichnis.
$verzeichnisinhalt = array();
while (true == ($file = readdir($fh)))
{
if ((substr(strtolower($file), -3)=="jpg") or (substr(strtolower($file), -3)=="gif"))
{
$verzeichnisinhalt[] = $file;
}
}
Du liest alle Dateien, die auf "jpg" oder "gif" enden, ein.
for($i=0;$i<count($verzeichnisinhalt);$i++)
echo "<a href=./img.php?var=$verzeichnisinhalt[$i]><img src='./".$verzeichnisinhalt[$i]."' height=110 border=0 ></img></a>";
}
Du generierst einen Link mit Bildinhalt. Auf das Bild kann direkt zugegriffen werden, der Link führt zu deinem zweiten Skript.
Zugriffsschutz? Fehlanzeige! Diese Galerieübersicht kriegt jeder.
Datei 2:
<?php
$path = getcwd();
Du definierst dir das aktuelle Verzeichnis in $path.
$name = substr($path, 50);
Du schneidest willkürlich (eventuell passend für deine derzeitige Konfiguration und Verzeichnisbezeichnung) 50 Zeichen vom Pfad ab.
$slash ='/';
$path = '../../../../../../data/';
Du definierst $pfad neu mit vielen Slashes.
$bild = ($_GET['var']);
Du übernimmst unkritisch den per Parameter übernommenen Bildnamen.
$pic = file_get_contents($path.$name.$slash.$bild);
echo $pic;
Du liest den Dateiinhalt der Bilddatei (sofern sie denn tatsächlich existiert, den identischen Namen zu ihrem Vorschaubild hat, und vom Browser auch als Bilddatei erkannt wird) in eine Variable und gibst diese aus.
Gleichfalls gilt auch hier: Wer die URL aus dem Link kennt, kann das Bild abrufen. Den gleichen Effekt hast du, wenn du deine Bilder direkt zum ungeschützten Zugriff in ein Verzeichnis innerhalb von DOCUMENT_ROOT stellst.
Mit anderen Worten: Warum der Aufwand für den ganzen Kram, wenn du doch nichts geändert hast, außer Rechenzeit für die PHP-Skripte zu verbraten?
- Sven Rautenberg
"Love your nation - respect the others."