• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Bild-URL verstecken, durch laden über PHP

css_chaos

Neues Mitglied
Hallo,

ich will einen kleinen Login programmieren, bei dem nach der Anmeldung einfach nur ein Bild angezeigt wird. Allerdings will ich die Bilddatei in einem .htaccess geschützen Verzeichnis abspeichern, damit sie wirklich nur angesehen werden kann, wenn man sich angemeldet hat.

Damit man das Bild in einen <img>-Tag einbinden kann verwende ich folgenden Code:
HTML:
<img src = "bild.php" style = "width: 100px; height: 100px;">

Um das Bild aus dem sicheren Verzeichnis zu können habe ich das da in die Data bild.php geschrieben:
PHP:
<?php
header("Content-type: image/jpeg;");
readfile("sicheres_verzeichnis/bild.jpg");
?>"

Es funktioniert zwar so, allerdings weiß ich nicht ob man das so machen sollte (ob es da eine Norm oder soetwas in der Art gibt) oder ob es noch eine bessere Möglichkeit gibt. Es wäre schön, wenn mir einer von euch helfen könnte.

Vielen Dank im Voraus,

css_chaos
 
Werbung:
Ja, das ist durchaus ein Weg den man hierbei gehen kann :) Du kannst es auch noch dynamischer gestalten und per Parameter hinter der bild.php noch den Bildnamen (ohne Verzeichnisnamen) angeben. Dann kannst Du das auch für verschiedenste Grafiken verwenden. Auch wäre dann eine Anpassung des Content-type abhängig vom Bild-Typ sinnvoll. Das kannst Du entweder über die Dateiendung oder durch Ermittlung des Content-types der Datei machen.
 
Hallo,

ich will einen kleinen Login programmieren, bei dem nach der Anmeldung einfach nur ein Bild angezeigt wird. Allerdings will ich die Bilddatei in einem .htaccess geschützen Verzeichnis abspeichern, damit sie wirklich nur angesehen werden kann, wenn man sich angemeldet hat.

Damit man das Bild in einen <img>-Tag einbinden kann verwende ich folgenden Code:
HTML:
<img src = "bild.php" style = "width: 100px; height: 100px;">

Um das Bild aus dem sicheren Verzeichnis zu können habe ich das da in die Data bild.php geschrieben:
PHP:
<?php
header("Content-type: image/jpeg;");
readfile("sicheres_verzeichnis/bild.jpg");
?>"

Es funktioniert zwar so, allerdings weiß ich nicht ob man das so machen sollte (ob es da eine Norm oder soetwas in der Art gibt) oder ob es noch eine bessere Möglichkeit gibt. Es wäre schön, wenn mir einer von euch helfen könnte.

Vielen Dank im Voraus,

css_chaos

Statt readfile() solltest du den X-Sendfile Header verwenden wenn möglich.
Damit überlässt du dem Server die Auslieferung der Datei, was in allen Belangen besser ist.
 
Werbung:
Danke für den Tipp, aber leider funktioniert das mit dem X-Sendfile Header nicht (wahrscheinlich wegen der htaccess-Sperre). Darum habe ich ja versucht, das Bild in die PHP-Datei zu laden, damit ich die Sperre umgehen kann.
 
Danke für die Hilfe, allerdings habe ich es nicht geschafft X-Sendfile zu aktivieren, bzw. zu installieren. Aber ich habe immerhin herausgefunden, dass man readfile() gar nicht für große Downloads einsetzen kann.
Dann bin ich auf einer Webseite auf folgende Lösung gestoßen (für einen Download):

PHP:
<?php

$download_rate = 2;
$local_file = "image.tif";
header('Content-Type: image/tif');
header('Content-Length: '.filesize($local_file));
header('Content-Disposition: attachment; filename='.basename($local_file));
ob_flush();
flush();
$file = fopen($local_file, "rb");

while(!feof($file))    {
$buffer = fread($file, $download_rate * 1024);
print $buffer;
ob_flush();
flush();
$buffer = "";
sleep(1);
}

fclose($file);

?>

("image.tif" ist eine Datei mit der Größe 30MB)

Durch die Chunks wird der Buffer nicht überlastet, so habe ich es zumindest verstanden. Bei mir funktioniert dieser Code einwandfrei. Allerdings wird durch sleep(1) der Download ziemlich in die Länge gezogen. Kann man dieses sleep(1) auch weglassen, ohne dass es Probleme gibt?
 
Werbung:
Ich habe es schon getestet und es funktioniert und wollte nur mal wissen, ob das allgemein so ist.

Danke
 
Zuletzt bearbeitet:
Zurück
Oben