Hallo Stefan !
hallo!
ich wollte ein php-script machen, das bilder automatisch
austauscht, wenn von einer fremden seite direkt verlinkt
wird.
das ist mein versuch, der (wie ich mir schon dachte) nicht
klappt.
ist wohl viel quatsch, aber etwas besseres ist mir nicht
eingefallen, denn ich bin noch zeimlicher anfänger in sachen
php 
<?php
datei = $PATH_INFO;
Da sollte $_SERVER[„PATH_INFO“] stehen, wenn schon (Sicher für register_globals=off). Du rufst das also mit
auf ?
$bildordner = „bilderordner“;
Ok.
$newurl = readfile($imgdir.$datei);
Das gibt den Inhalt der Datei aus, dass willst du hier noch nicht, die Zeile kommt später. In $newurl steht nur die Anzahl der Bytes.
$check =
„^http://([www.])*floeper.com/[0-9a-zA-Z]*\.[a-zA-Z]floeper.com/[0-9a-zA-Z]%5C%5C.%5Ba-zA-Z%5D)“;
Sicher, das nach dem Punkt nur ein Zeichen kommen darf ? Außerdem fehlt der umgebende Trenner, also so was
#http://([www.])*floeper.com/[0-9a-zA-Z]*\.[a-zA-Z]#ifloeper.com/[0-9a-zA-Z]%5C%5C.%5Ba-zA-Z%5D%23i)
i macht das Ganze gleich noch groß/kleinschreibungsunabhängig
if ($HTTP_REFERER==$check)
== ist hier falsch, es soll ja nicht gleich sein, sondern du willst auf den regulären Ausdrück prüfen. also schreibe mal ein preg_match(…) in die Klammer. $_SERVER[„HTTP_REFERER“] geht auch bei register_globals off, siehe oben. Außerdem solltest du zusätzlich noch leeren Referer zulassen, da dieser von einigen Firewalls/Proxys gefiltert wird.
{
echo $newurl;
Da steht nur eine Zahl oder FALSE drin, ganz falsch.
Hier muss jetzt das readfile hin, allerdings solltest du vorher noch prüfen, was für eine Datei angefordert wurde (jpeg oder gif; mit strstr oder preg_match suchen) und den passenden Header senden:
Header(„Content-Type: image/jpeg“);
Danach eigentlich das readfile, aber vorher musst du „böse“ Zeichen aus $datei filtern, damit dir keiner …/…/…/etc/passwd da unterschieben kann. Also am besten per preg_replace alles außer Buchstaben, Ziffern, und dem „.“ entfernen, insbesondere „/“ und „“.
Da kann man dann auch noch abfangen, das es die Datei nicht gibt:
if (@readfile($imgdir.$datei)===FALSE) {
Header(„Location: http://…/nichtda.jpeg“);
exit;
}
Neben dieser Variante, wo der Server das Bild liest und sendet, könntest du hier auch nur eine Umleitung auf die richtige URL, wie unten verwendet, angeben. Das hat den vorteil, das der Server nciht so stark belastet wird, aber den Nachteil, das der Benutzer die wahre URL ermitteln kann…
}
else
{
echo „“;
Das geht nun gar nicht, was soll der Browser mit dem HTML-Code, wenn er ein Bild erwartet ?
Entweder du sendest einfach die URL als „Umleitung“:
Header("Location: http://www.floeper.com/traffic.gif");
wie oben den passenden Content-Type und die Bilddaten hinterher.
}
?>
Alexander