PHP Header Probleme, Browser lädt erst Bild und dann verschwindet es

MsWord

Mitglied
Hallo,

ich habe mir einen kleinen Uploader geschrieben.
Soweit auch alles gut. Damit man nicht direkt auf Verzeichnis zugreift,
um das Verzeichnis für außenstehende geheim zu halten, habe ich mir ein kleines Script geschrieben.

Ausgeben tut das Script auch alles ohne Probleme.
Leider lädt der Browser es aber durchgehend, auch wenn es schon zu sehen ist. (Ich bleibe mal bei Bildern)
Bindet man das Bild irgendwo ein, z.B. <img src="http://example.de/?l=code">,
lädt der Browser das Bild, zeigt es an und sobald dieser fertig mit laden ist (laut Lade-Icon),
verschwindet das Bild wieder. So als ob es nicht existieren würde.

Ich bin echt überfragt. Hat jemand eine Idee woran es liegen könnte?

PHP:
<?php
function show_file($code){
    if(dbanz('file_uploader', 'code', $code) == 1){
        $type = dbout('mime', 'code', $code, 'file_uploader');
        $file_path = 'uploads/'.dbout('filename', 'code', $code, 'file_uploader').'.'.dbout('mime', 'code', $code, 'file_uploader');
        $file_timestamp = dbout('timestamp', 'code', $code, 'file_uploader');
       
        if($type == 'png') $type = 'image';
        if($type == 'jpg') $type = 'image';
        if($type == 'jpeg') $type = 'image';
        if($type == 'gif') $type = 'image';
        if($type == 'jpe') $type = 'image';
        if($type == 'bmp') $type = 'image';
        if($type == 'ico') $type = 'image';
               
        if(file_exists($file_path)){
            // Header Informations
            header('Content-length: '.filesize($file_path));
            header('X-Pad: avoid browser bug');
            header('Cache-Control: no-cache');
            header("Expires: " . gmdate("D, d M Y H:i:s", $file_timestamp) . " GMT");
            header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
            header('Cache-Control: no-store, no-cache, must-revalidate');
            header('Cache-Control: post-check=0, pre-check=0', false);
            header("Pragma: no-cache");
           
            switch($type){
                case 'mp3':
                    header('Content-type: audio/mpeg');
                    readfile($file_path);
                    exit();
                break;
                case 'm4a':
                    header('Content-type: audio/x-m4a');
                    readfile($file_path);
                    exit();
                break;
                case 'wav':
                    header('Content-type: audio/x-wav');
                    readfile($file_path);
                    exit();
                break;
                case 'acc':
                    header('Content-type: audio/acc');
                    readfile($file_path);
                    exit();
                break;
                case 'ogg':
                    header('Content-type: application/ogg');
                    readfile($file_path);
                    exit();
                break;
                case 'mp4':
                    header('Content-type: video/mp4');
                    readfile($file_path);
                    exit();
                break;
                case 'avi':
                    header('Content-type: video/avi');
                    readfile($file_path);
                    exit();
                break;
                case 'qt':
                    header('Content-type: video/quicktime');
                    readfile($file_path);
                    exit();
                break;
                case 'mov':
                    header('Content-type: video/quicktime');
                    readfile($file_path);
                    exit();
                break;
                case 'txt':
                    header("Content-Type: text/plain");
                    readfile($file_path);
                    exit();
                break;
                case 'pdf':
                    header("Content-Type: application/pdf");
                    readfile($file_path);
                    exit();
                break;
                case 'image':
                    $type = dbout('mime', 'code', $code, 'file_uploader');
                    if($type == 'jpe') $type = 'jpeg';
                    if($type == 'jpg') $type = 'jpeg';       
                        switch($type){
                            case'jpeg':
                                $img = imagecreatefromjpeg($file_path);
                                header('Content-type: image/jpeg');
                                   imagejpeg($img);
                                   imagedestroy($img);
                            break;
                            case'png':
                                $img = imagecreatefrompng($file_path);
                                header('Content-type: image/png');
                                   imagepng($img);
                                   imagedestroy($img);
                            break;
                            case'gif':
                                $img = imagecreatefromgif($file_path);
                                header('Content-type: image/gif');
                                   imagegif($img);
                                   imagedestroy($img);
                            break;
                            case'bmp':
                                $img = imagecreatefromwbmp($file_path);
                                header('Content-type: image/vnd.wap.wbmp');
                                   imagewbmp($img);
                                   imagedestroy($img);
                            break;
                        } /* switch */
                           exit();
                break;
                default:
                    $error = 'Die gewünschte Datei kann nicht angezeigt werden!';
                break;
            }
        } else { /* if(file_exists([...])) */
            $error = 'Datei existiert nicht!';
        }
    } else { /* if(dbanz([...])) */
        $error = 'Die gewünschte Datei existiert nicht!';
    }
    return sondertext($error);
}
?>
 
Gib mal den Quelltext oder besser den Link dazu, dass man sich das mal ansehen kann, was mit dem Bild passieren wird, vielleicht wird das Bild ja auch nur überblendet.

Zu dem Ladesymbol:
Leider lädt der Browser es aber durchgehend
Falls du mit einer Datenbankverbindung arbeitest, die als Objekt deklariert ist, so kann es passieren, wie ich es auch hatte, dass die Seite dauerhaft lädt, wenn du aber am Ende der Haupt-Index-Datei in der Regel, dieses Objekt komplett auf NULL setzt, kann dieses dann nicht mehr weiter ausgeführt werden und das Ladesymbol verschwindet.
PHP:
$objekt = NULL;
 
Also der Fehler steckt scheinbar in Verbindung mit der Zeile 15 von der content.js Datei und da erscheint noch der folgende Fehler mit:
Failed to load resource: net::ERR_CONTENT_LENGTH_MISMATCH
Dies ist JS und absolut nicht mein Themengebiet, leider.

Dies kannst du selbst auch besser Untersuchen, wenn du mit der rechten Maustaste das Element oder die Seite mit der rechten Maustaste anklickst und dann z.B.: beim Google-Crome "Element untersuchen" auswählst.
Bei dem Tabs, findest du einen Reiter "Sources", wo du dies im Script etwas untersuchen kannst.

Bei anderen Browsern kann es anders heißen und nicht jeder wird dies unter Umständen anbieten.
 
Also erstmal bekomme ich folgenden JS-Fehler:
GET http://www.projectx2.webappos.de/?l=moMZzA6ptJwvsqe5 net::ERR_CONTENT_LENGTH_MISMATCH

Hier was mir mein Netzwerk-Tool ausspuckt:
network.png


Nur verstehe ich nicht wie das zur Stande kommt.
Aber das muss doch auch was mit dem PHP Script zu tun haben, denn wenn man das Bild alleine öffnet, lädt er ja dauerhaft, ohne JS und so ein kram.
 
Ok, Fehler gefunden ^^

Verursachen tun das folgender Teil:
PHP:
<?
//[...]
                            case'png': 
                                $img = imagecreatefrompng($file_path); 
                                header('Content-type: image/png'); 
                                   imagepng($img); 
                                   imagedestroy($img); 
                            break;

Ich habe es jetzt mal mir readfile gemacht:
PHP:
<?
//[...]
                            case'png':  
                                header('Content-type: image/png'); 
                readfile($file_path);
                            break;

So funktioniert es jetzt auch ohne Probleme :D
 
Zurück