У меня есть файл $file (например ../image.jpg ) 
  который имеет тип mime типа $type 
Как я могу вывести его в браузер?
 $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; } } 
 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», я получаю вкус и работает! это скриншот: Скриншот «безопасного изображения» из базы данных