Mailinglisten-Archive |
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