Я отображаю изображения снаружи своего веб-корня, как это:
header('Content-type:image/png');
readfile($fullpath);
Тип контента: image/png - то, что смущает меня.
Кто-то еще выручил меня с этим кодом, но я заметил, что не всеми изображениями является PNG. Многие - jpg или gif.
И тем не менее они отображены успешно.
кто-либо знает почему?
Лучшим решением было бы прочитать файл, затем решить, что это за изображение, и отправить соответствующий заголовок
$filename = basename($file);
$file_extension = strtolower(substr(strrchr($filename,"."),1));
switch( $file_extension ) {
case "gif": $ctype="image/gif"; break;
case "png": $ctype="image/png"; break;
case "jpeg":
case "jpg": $ctype="image/jpeg"; break;
case "svg": $ctype="image/svg+xml"; break;
default:
}
header('Content-type: ' . $ctype);
(Примечание: правильный тип содержимого для JPG файлов - image/jpeg
)
Браузеры часто могут определить тип изображения, пронюхав метаинформацию изображения. Кроме того, в этом заголовке должен быть пробел:
header('Content-type: image/png');
Браузеры делают наилучшие предположения на основе полученных данных. Это работает для разметки (которую веб-сайты часто ошибаются) и другого медиа-контента. Программа, получающая файл, часто может выяснить, что он получил, независимо от того, какой тип содержимого MIME ей сообщили.
Однако вы не должны полагаться на это. Рекомендуется всегда использовать правильный MIME-контент.