PHP, изображение на дисплее с Заголовком ()

Я отображаю изображения снаружи своего веб-корня, как это:

header('Content-type:image/png');
readfile($fullpath);

Тип контента: image/png - то, что смущает меня.

Кто-то еще выручил меня с этим кодом, но я заметил, что не всеми изображениями является PNG. Многие - jpg или gif.
И тем не менее они отображены успешно.

кто-либо знает почему?

38
задан Amber 13 April 2010 в 23:37
поделиться

3 ответа

Лучшим решением было бы прочитать файл, затем решить, что это за изображение, и отправить соответствующий заголовок

$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)

59
ответ дан 27 November 2019 в 03:26
поделиться

Браузеры часто могут определить тип изображения, пронюхав метаинформацию изображения. Кроме того, в этом заголовке должен быть пробел:

header('Content-type: image/png');
3
ответ дан 27 November 2019 в 03:26
поделиться

Браузеры делают наилучшие предположения на основе полученных данных. Это работает для разметки (которую веб-сайты часто ошибаются) и другого медиа-контента. Программа, получающая файл, часто может выяснить, что он получил, независимо от того, какой тип содержимого MIME ей сообщили.

Однако вы не должны полагаться на это. Рекомендуется всегда использовать правильный MIME-контент.

4
ответ дан 27 November 2019 в 03:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: