Output an Image in PHP Output an Image in PHP php php

Output an Image in PHP


$file = '../image.jpg';$type = 'image/jpeg';header('Content-Type:'.$type);header('Content-Length: ' . filesize($file));readfile($file);


If you have the liberty to configure your webserver yourself, tools like mod_xsendfile (for Apache) are considerably better than reading and printing the file in PHP. Your PHP code would look like this:

header("Content-type: $type");header("X-Sendfile: $file"); # make sure $file is the full path, not relativeexit();

mod_xsendfile picks up the X-Sendfile header and sends the file to the browser itself. This can make a real difference in performance, especially for big files. Most of the proposed solutions read the whole file into memory and then print it out. That's OK for a 20kbyte image file, but if you have a 200 MByte TIFF file, you're bound to get problems.


$file = '../image.jpg';if (file_exists($file)){    $size = getimagesize($file);    $fp = fopen($file, 'rb');    if ($size and $fp)    {        // Optional never cache    //  header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');    //  header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past    //  header('Pragma: no-cache');        // Optional cache if not changed    //  header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($file)).' GMT');        // Optional send not modified    //  if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) and     //      filemtime($file) == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']))    //  {    //      header('HTTP/1.1 304 Not Modified');    //  }        header('Content-Type: '.$size['mime']);        header('Content-Length: '.filesize($file));        fpassthru($fp);        exit;    }}

http://php.net/manual/en/function.fpassthru.php