Grundsätzlich geht sowas mit einer php-Datei, die du aufrufst. Zum Beispiel:
<?php
header('Content-type: image/jpeg');
readfile("bild.jpg")?>
Der Aufruf dieser PHP-Datei im Browser würde einfach nur bild.jpg anzeigen als hättest du es direkt aufgerufen.
Um die Fullsize-Pics nicht mehr direkt sondern über eine solche php-Datei aufzurufen, wäre wie folgt vorzugehen:
1. Lege eine Datei namens showthepic.php im Hauptverzeichnis von Coppermine an mit dem folgenden Inhalt:
<?php
$mypath = $_GET['mypath'];
// Wenn einer versucht, ins übergeordnete Verzeichnis zu wechseln, beenden
if($mypath!=str_replace("..","",$mypath)) die;
// Wenn einer versucht, eine php-Datei im Quellcode auszulesen, beenden
if($mypath!=str_replace("php","",$mypath)) die;
// Wenn einer versucht, eine .htaccess-Datei im Quellcode auszulesen, beenden
if($mypath!=str_replace("htaccess","",$mypath)) die;
// Wenn Datei nicht existiert, beenden
if(file_exists('./albums/'.$mypath)!=True) die;
// Dateiendung ermitteln und in Kleinbuchstaben umwandeln
$ft=substr($mypath, -4);
$ft=strtolower($ft);
// Wenn Datei nicht vom Typ jpg, jpeg, png, gif oder png, beenden
if(($ft!='.jpg')&&($ft!='jpeg')&&($ft!='.gif')&&($ft!='.png')) die;
header('Content-type: image/jpeg');
readfile ('./albums/'.$mypath);
?>
2. Prüfe, ob es in der theme.php des von dir benutzten Themes eine Funktions namens function theme_display_fullsize_pic() gibt.
3. Falls nicht, öffne die theme.php aus dem Sample-Theme und kopieren die komplette Funktion in dein eigenes theme hinüber. Achtung: Die Funktion hat ziemlich viel plain HTML am Ende und endet auf
<?php
}
4. Ändere die Zeile
$pic_url = get_pic_url($row, 'fullsize');
in
$pic_url = 'showthepic.php?mypath='.$row['filepath'].$row['filename'];
Fertig.
Diese Lösung hat aber Nachteile:
- Sie belastet den Server stärker, die Performance wird also schlechter.
- Sie funktioniert nur, wenn PHP entsprechend konfiguriert ist, damit sie funktionieren kann.
- Sie funktioniert so nur mit diesem einen Theme. Um's generell zu ändern, müsstest du die themes.inc.php abändern, wovon hier im Forum zu Recht abgeraten wird.
- Sie stellt ein Sicherheitsrisiko dar, da du Dateien von der Platte des Servers liest und publizierst.
Was du in deine .htaccess-Dateien reinschreibst, ist dem PHP-Skript aber schnurzegal, da es die Datei auf File-Ebene und nicht auf Webserverebene aufruft. Also wäre damit ein Kennwortschutz möglich.
Die Lösung verhindert nun aber natürlich nicht, dass jemand auf die PHP-Datei Hotlinks setzt; da müsstest du dich noch um eine Session-Manegement kümmern und in die Sache einbauen.
Mehr im folgenden Posting.
Edit: Einige Sicherheitsfunktionen nachgetragen.