phpbar.de logo

Mailinglisten-Archive

[php] Mozilla-Besonderheit bei image*() Funktionen?

[php] Mozilla-Besonderheit bei image*() Funktionen?

Andreas Demmer php at andreas-demmer.de
Don Mar 18 15:29:57 CET 2004


Hallo,

ich experimentiere gerade mit einem Schutz gegen Fremdverlinkung.

Vollzieht bitte mal folgende Prozedur auf dem Mozilla und falls möglich
danach auch auf dem Internet Explorer (immer in der selben Instanz des
Browsers:

Aufruf von http://www.andreas-demmer.de/media/screen.jpg
Aufruf von http://www.andreas-demmer.de/
Aufruf von http://www.andreas-demmer.de/media/screen.jpg

Was passiert im IE (korrekt):
erster Aufruf liefert einen Copyright Hinweis
zweiter Aufruf zeigt die Website
dritter Aufruf (gleiche URL wie beim ersten Mal) zeigt nun endlich das
gewünschte Bild

Was passiert im Mozilla (falsch):
erster Aufruf liefert das Bild im Klartext
zweiter Aufruf zeigt die Website
dritter Aufruf (gleiche URL wie beim ersten Mal) zeigt das Bild im Klartext

Warum bringt der Mozilla die Header durcheinander, der IE aber anscheinend
nicht?
Folgender Code steckt dahinter, und ich gehe einfach mal davon aus, dass die
image*()
Funktionen der GDlib 2.x korrekte Header senden:

@session_start();

if($_SESSION['show_media']) {
    $params = explode('/', $_SERVER['REQUEST_URI']);
    $filename = array_pop($params);
} else {
    $filename = 'deny.png';
}

$suffix = substr($filename, strrpos($filename, '.') + 1);
$filepath = PATH_UPLOADS.$filename;

if(!file_exists($filepath)) {
    die('ERROR 404: file not found!');
}

// Ausgabe der Medien-Datei mit korrektem Header
if(preg_match('|^jpe*g$|i', $suffix)) {
    // JPG Bild
    $image = imagecreatefromjpeg($filepath);
    imagejpeg($image);
} elseif(preg_match('|^gif$|i', $suffix)) {
    // GIF Bild
    $image = imagecreatefromgif($filepath);
    imagegif($image);
} elseif(preg_match('|^png$|i', $suffix)) {
    // PNG Bild
    $image = imagecreatefrompng($filepath);
    imagepng($image);
} elseif(preg_match('|^pdf$|i', $suffix)) {
    // PDF Dokument
    header('Content-type: application/pdf');
    header('Content-length: '.strlen($file));
    header('Content-Disposition: inline; filename='.$filename);
    readfile($filepath);
} else {
    // unbekannter Medientyp
    Header('Content-Type: application/octlet-stream');
    header('Content-length: '.strlen($file));
    Header('Content-Disposition: filename='.$filename);
    readfile($filepath);
}

Gruss,
Andreas

PS: Es werden keine Zeichen ausserhalb der PHP Tags gesendet.

-- 
http://www.midgetcms.de



php::bar PHP Wiki   -   Listenarchive