Hallo,
dann die Bilder in ein Verzeichnis legen, das mit HTTP gar nicht erreichbar ist (also außerhalb des Document Root) und sie ebenfalls mit PHP ausliefern. Dieses PHP-Script prüft dann die Berechtigung anhand des Login-Status und kann sogar im Fehlerfall ein Ersatzbild ausliefern.
Wie genau stelle ich das an?
genau so, wie ich es beschrieben habe. ;-)
Die Bilder liegen, wie gesagt, irgendwo, wo man sie mit einem HTTP-Request nicht erreicht. Im Dokument referenzierst du sie dann nicht mehr direkt (das geht ja dann nicht mehr), sondern z.B. so:
<img src="image.php?file=DSC_2081" alt="...">
Das Script image.php prüft nun wieder die Berechtigung, wie gehabt, indem auth.php am Anfang eingebunden wird. Dann prüft es, ob das als Parameter angegebene Bild überhaupt existiert, und falls ja, sendet es den HTTP-Header "Content-Type: image/jpeg" und die Bilddaten hinterher. Ungefähr so:
<?php
require_once "auth.php";
$images = array('DSC_2080', 'DSC_2081', 'DSC_2082', 'DSC_2083');
header('Content-Type: image/jpeg');
if (isset($_GET['file'] && in_array($_GET['file'], $images))
{ readfile('../bilder/' . $_GET['file'] . '.jpg');
}
else
{ readfile('../bilder/notfound.jpg');
}
Ich denke, das ist einfach nachvollziehbar. Wichtig wäre nur, die Pfadangaben anzupassen, und das Array $images zu pflegen, das quasi eine Whitelist erlaubter Dateien darstellt. Würde man auf eine solche Prüfung verzichten, könnten unter Umständen auch andere Dateien (z.B. PHP-Scripte selbst oder die .htaccess-Dateien) durch das Script ausgeliefert werden.
Auf das abschließende ?> habe ich bewusst verzichtet, damit nicht versehentlich am Ende der Bilddaten noch überschüssige Textzeichen (Blanks, Leerzeilen) in der Ausgabe landen.
Unser Webhoster ist 1&1 und ich weiß nicht ob ich das außerhalb des root Verzeichnis legen kann.
Es wäre ein Armutszeugnis für 1&1, wenn das nicht ginge. Aber als Notlösung kann man auch einfach ein x-beliebiges Verzeichnis anlegen und mit einer .htaccess jeden HTTP-Zugriff darauf verbieten - sollte doch jemand zufällig(!) den Verzeichnisnamen wissen, bekommt er beim Zugriff darauf nur die Statusmeldung 403 Access denied.
Btw, was macht deine auth.php eigentlich, wenn die Session nicht aktiv ist?
So long,
Martin
--
Es gibt eine Theorie, die besagt, dass das Universum augenblicklich durch etwas noch Komplizierteres und Verrücktes ersetzt wird, sobald jemand herausfindet, wie es wirklich funktioniert. Es gibt eine weitere Theorie, derzufolge das bereits geschehen ist.
- (frei übersetzt nach Douglas Adams)