phpheader

PHP, display image with Header()


I'm displaying images from outside my web root, like this:

header('Content-type:image/png');
readfile($fullpath);

The content-type: image/png is what confuses me.

Someone else helped me out with this code, but I noticed that not all images are PNG. Many are jpg or gif.
And still they are displayed successfully.

does anyone know why?


Solution

  • The best solution would be to read in the file, then decide which kind of image it is and send out the appropriate header

    $filename = basename($file);
    $file_extension = strtolower(substr(strrchr($filename,"."),1));
    
    switch( $file_extension ) {
        case "gif": $ctype="image/gif"; break;
        case "png": $ctype="image/png"; break;
        case "jpeg":
        case "jpg": $ctype="image/jpeg"; break;
        case "svg": $ctype="image/svg+xml"; break;
        default:
    }
    
    header('Content-type: ' . $ctype);
    

    (Note: the correct content-type for JPG files is image/jpeg)