Я заставляю загружать изображение через мой сайт.
Принудительная загрузка отлично работает на машине разработки Apache / Windows.
Однако при нажатии на мой Linux-сервер он выталкивает ненужные символы на экран.
eg JFIF H H 6Exif MM *
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();
Какие отличия могут быть на моем реальном сервере, которые могут привести к его разрыву?
Кончик шляпы (и +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 установить на изображение?