Задание загрузки изображения в PHP. Работает локально, но ломается на реальном Linux-сервере

Я заставляю загружать изображение через мой сайт.

Принудительная загрузка отлично работает на машине разработки Apache / Windows.

Однако при нажатии на мой Linux-сервер он выталкивает ненужные символы на экран.

eg      JFIF  H H    6Exif  MM *     
  • Firefox – хлам
  • Хром – хлам
  • Internet Explorer 7 – отображает изображение на странице

     $fileName = basename($filePath); $fileSize = filesize($filePath); // Output headers. header("Cache-Control: private"); header("Content-Type: Image/jpeg"); header("Content-Length: ".$fileSize); header("Content-Disposition: attachment; filename=".$fileName); // Output file. readfile ($filePath); exit(); 

Какие отличия могут быть на моем реальном сервере, которые могут привести к его разрыву?

Related of "Задание загрузки изображения в PHP. Работает локально, но ломается на реальном Linux-сервере"

Кончик шляпы (и +1) до сих пор , кто указал на использование fifo , но я думал, что приведу пример, чтобы помочь. Этот пример требует установки расширения fifo и был взломан и слегка изменен из другого кода.

  $filename = 'blarg.jpg'; $filepath = '/foo/bar/blarg.jpg'; $finfo = new finfo(FILEINFO_MIME); $mime = $finfo->file($file); // Provide a default type in case all else fails $mime = ($mime) ? $mime : 'application/octet-stream'; header('Pragma: public'); header('Content-Transfer-Encoding: binary'); header('Content-type: ' . $mime); header('Content-Length: ' . filesize($filepath)); header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Content-transfer-encoding: 8bit'); header('Expires: 0'); header('Pragma: cache'); header('Cache-Control: private'); 

У вас неправильный тип MIME в заголовке. Используйте finfo чтобы вы могли отправить правильный finfo вместо передачи всего как application/stream , иначе поведение браузера будет непредсказуемым.

Должен ли параметр Content-Type установить на изображение?