Liebes Forum,
ich habe folgendes Problem.
Ich habe eine HP auf der sich User einloggen können und bestimmte Angebote aufrufen können.
Die User können sich auch Grafiken (png) ansehen, die speziell für sie erstellt wurden.
Ich möchte nun verhindern, dass die User sich den Verweis merken und die Grafik auch ohne sich einzuloggen ansehen können.
Die Grafik nach Sessionende löschen geht nicht, weil die Grafik immer erweitert wird.
Danke für Hilfe.
onemorenerd
26-11-2006, 13:29
Statt
<img src="geheimegrafik.png" />
einfach
<img src="showimage.php" />
mit<?php // showimage.php
session_start();
if ($_SESSION['loggedin']) {
header(/* die richtigen Header zum Bild */);
readfile('geheimegrafik.png');
}
?>und schon erfährt niemand mehr den wahren Pfad zum Bild.
irgend was geht nicht. Ich bekomme immer das nette Zeichen da seine Grafik nicht richitg verlinkt ist.
kann die php auch nach diesem Muster aussehen? Leider geht es auch so nicht.
<?php
header('localhost/home/tmp/bild.png');
readfile('geheimegrafik.png');
?>
Danke
Rolandbar
26-11-2006, 15:36
:rofl:
Das kann ja nicht gehen!
Schau lieber mal im PHP Handbuch die Beschreibung zu header() an,
http://ch2.php.net/manual/de/function.header.php
Ausserdem schützt dein Script nicht vor Leuten die nicht eingeloggt sind.
Nimm den Code von onemorenerd passe das if an, du wirst doch sicher etwas in der session haben, das sagt, das der User eingeloggt ist?
Beim Header musst du den entsprechenden Header zum Bild Typ senden. Ausserdem musst du noch den Pfad zur Grafik bei readfile() anpassen.
mfg Roland
Entschuldigt meine Unwissenheit. :(
<?php
if ($_SESSION['name']) {
header('http://localhost/home/grafik.png');
readfile('http://localhost/geheimegrafik.png');
}
?>
Auf
header()
readfile()
bin ich heute zu ersten mal getroffen.
onemorenerd
26-11-2006, 17:00
Beantworte folgende Fragen, wenn nötig mit Hilfe des Manuals:
Warum soll dein Script das Bild ausliefern, wenn $_SESSION['name'] wahr ist?
Was macht die Funktion header() und warum übergibst du ihr die URL http://localhost/home/grafik.png?
Was macht die Funktion readfile() und warum übergibst du ihr die URL http://localhost/geheimegrafik.png?
Ich habe es mal wieder gegeben wie ich das so verstehe, wobei mir die Funktionen header und readfile weiter hin unklar erscheinen. Das Manual versetzt mich nicht auf den Wissensstand von Euch, es liefert mir zuwenig verständliche Erklärungen.
<?php
if (isset($_SESSION['login']) && $_SESSION['login'] === true) { // variable vorhanden und true ist
header('/home/bild.png'); // ist die Kopfzeile des HTTP Protokoll der informationen ueber die Datei liefern soll -- lage der Grafik wird angegeben
readfile('grafik.png'); // laed eine Datei und gibt sie aus -- position der grafik die angegeben werden soll
}
?>
Rolandbar
26-11-2006, 17:52
Du kommst der Sache schon näher.
zu header():
Falsch!
header() wird zum Senden von HTTP Anfangsinformationen (Headern) im Rohformat benutzt. Weitere Informationen über die HTTP Header finden Sie in der HTTP/1.1 Spezifikation.
Damit der Browser weiss, das dein PHP-Script ein Bild ist, und nicht HTML Code, musst du den Header Content-Type anpassen/senden. Wenn du ein .png Bild hast, wäre es der folgende:
header("Content-Type: image/png");
zu readfile():
Wenn dein Bild grafik.png im gleichen Ordner wie das PHP-Script liegt, stimmt das, sonnst musst du den Pfad zum Bild anpassen.
mfg Roland
Juhu, ich habs verstanden.
Die php Datei übernimmt die Funktion der Grafik. Ich dachte die ganze Zeit das sie den Namen wandelt.
Also es geht nun wie es beschrieben ist. Leider stehe ich vor dem nächsten Poblem.
Ich will natürlich zuvor den Grafiklink dem User anpassen. Jeder User hat eine eigene Grafik mit anderem Inhalt.
In einer anderen Datei wird der Link in die Session geladen.
Ich habe das Skript nach dem if so geändert, leider wird der Link nicht übergeben und es wird kein Bild angezeigt.
$link=$_SESSION['link'];
header('Content-Type: image/png');
readfile($link);
und auch so gehts nicht
$link=$_SESSION['link'];
header('Content-Type: image/png'); //
readfile('$link');
Danke für die Grundlagen, ich hoffe nun den Rest auch noch mit Eurer Hilfe zu schaffen.
Edit:
Fehler lag bei mir, Problem gelöst .
Danke noch mal für den Wissenszuwachs.