I have an image $file
( eg ../image.jpg
)
which has a mime type $type
How can I output it to the browser?
I have an image $file
( eg ../image.jpg
)
which has a mime type $type
How can I output it to the browser?
$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 relative
exit();
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
header(\'Content-type: image/jpeg\');
readfile($image);
Try this:
<?php
header(\"Content-type: image/jpeg\");
readfile(\"/path/to/image.jpg\");
exit(0);
?>
<?php
header(\"Content-Type: $type\");
readfile($file);
That\'s the short version. There\'s a few extra little things you can do to make things nicer, but that\'ll work for you.
You can use header to send the right Content-type :
header(\'Content-Type: \' . $type);
And readfile
to output the content of the image :
readfile($file);
And maybe (probably not necessary, but, just in case) you\'ll have to send the Content-Length header too :
header(\'Content-Length: \' . filesize($file));
Note : make sure you don\'t output anything else than your image data (no white space, for instance), or it will no longer be a valid image.
You can use finfo
(PHP 5.3+) to get the right MIME type.
$filePath = \'YOUR_FILE.XYZ\';
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$contentType = finfo_file($finfo, $filePath);
finfo_close($finfo);
header(\'Content-Type: \' . $contentType);
readfile($filePath);
PS: You don\'t have to specify Content-Length
, Apache will do it for you.
$file = \'../image.jpg\';
$type = \'image/jpeg\';
header(\'Content-Type:\'.$type);
header(\'Content-Length: \' . filesize($file));
$img = file_get_contents($file);
echo $img;
This is works for me! I have test it on code igniter. if i use readfile, the image won\'t display. Sometimes only display jpg, sometimes only big file. But after i changed it to \"file_get_contents\" , I get the flavour, and works!! this is the screenshoot: Screenshot of \"secure image\" from database