Вывести изображение в PHP

У меня есть файл $file (например ../image.jpg )

который имеет тип mime типа $type

Как я могу вывести его в браузер?

Related of "Вывести изображение в PHP"

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

Если вы имеете право самостоятельно настраивать свой веб-сервер, такие инструменты, как mod_xsendfile (для Apache), значительно лучше, чем чтение и печать файла на PHP. Ваш PHP-код будет выглядеть так:

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

mod_xsendfile собирает заголовок X-Sendfile и отправляет файл самому браузеру. Это может существенно повлиять на производительность, особенно для больших файлов. Большинство предлагаемых решений считывают весь файл в память и затем распечатывают его. Это нормально для 20-килобайтного файла изображения, но если у вас есть 200-мегабайтный TIFF-файл, вы обязательно получите проблемы.

 $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 MYH: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); 

Попробуй это:

 <?php header("Content-type: image/jpeg"); readfile("/path/to/image.jpg"); exit(0); ?> 
 <?php header("Content-Type: $type"); readfile($file); 

Это короткая версия. Есть несколько дополнительных вещей, которые вы можете сделать, чтобы сделать все лучше, но это сработает для вас.

Вы можете использовать заголовок для отправки правильного типа содержимого:

 header('Content-Type: ' . $type); 

И readfile для вывода содержимого изображения:

 readfile($file); 

И возможно (возможно, не обязательно, но на всякий случай) вам также придется отправить заголовок Content-Length:

 header('Content-Length: ' . filesize($file)); 

Примечание. Убедитесь, что вы не выводите ничего, кроме данных изображения (например, без пробелов) или оно больше не будет действительным изображением.

Вы можете использовать finfo (PHP 5.3+), чтобы получить правильный тип MIME.

 $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 : Вам не нужно указывать Content-Length , Apache сделает это за вас.

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

Это работает для меня! Я тестировал его на воспламенителе кода. если я использую readfile, изображение не будет отображаться. Иногда отображается только jpg, иногда только большой файл. Но после того, как я изменил его на «file_get_contents», я получаю вкус и работает! это скриншот: Скриншот «безопасного изображения» из базы данных