Подтвердить что ты не робот

Можно ли использовать изображения без расширения в <img>?

Возможный дубликат:
Безопасно ли показывать изображение в Интернете без расширения?

Я хотел бы использовать что-то вроде <img src="advertisements/12" style="border: 1px solid"> на странице. FireFox не отобразит его, что заставляет меня думать, что у меня есть расширение файла для файла. Я прямо здесь (для других браузеров тоже), или FF, как mime-типы?

ИЗМЕНИТЬ

Я пробовал всевозможные вещи, и это все равно не сработает. Я теперь правильно накладываю расширение на файл (например,.swf для Flash). Я изменил каталог и т.д. Когда я звоню file_exists(), файл там, все счастливы и такие, однако я абсолютно не могу его отобразить на странице. Он может быть либо .PNG в теге img, либо Flash-объекте. Ничего не работает. Что я делаю не так:-( Кроме того, если я переименую незагруженный файл в файл, который ищет script, это прекрасно работает, но загруженные не...

4b9b3361

Ответ 1

Да, вы должны уметь.

Браузеры первоначально не смотрят на имя файла, они смотрят на тип MIME, указанный в заголовке Content-type в ответе от HTTP-сервера. Если тип содержимого - это образ /jpeg, или png или gif или что-то еще, все хорошо, и он будет счастливо отображать изображение.

Если нет допустимого типа MIME, некоторые браузеры будут пытаться угадать, что такое тип. Они будут рассматривать расширение запроса объекта, или они будут смотреть на первые несколько байтов. Если это не удается, вы получите redex.

Это было причиной некоторых неприятностей в первые дни Firefox/Firebird, потому что он был строгим в отношении типов mime и часто отказывался отображать что-то без допустимого типа MIME. IE сделал предположение, и так много неаккуратных веб-серверов будут обслуживать страницы, которые отлично отображают IE, но не в других. В наши дни все гораздо лучше.

Итак, до тех пор, пока ваш веб-сервер будет предоставлять правильный тип MIME при запросе объекта img, вам будет хорошо идти. Если у вас возникли проблемы, проверьте, что делает ваш веб-сервер, когда запрашивается "реклама/12".

Ответ 2

Что возвращает сервер? На самом деле расширение файла не используется ни для чего. Браузер проверяет заголовок Content-type, который должен быть чем-то вроде image/jpeg или любого другого типа изображения, которое вы обслуживаете.

Это довольно часто используется на сайтах, которые динамически служат изображениям, часто из базы данных. Я видел много URL-адресов изображений, таких как image.aspx?id=37, который, хотя технически имеет "расширение", на самом деле не означает, что это изображение. Все это в значениях заголовка HTTP.

Ответ 3

Предоставление типа MIME может помочь, хотя сервер теоретически должен быть правильным. Если это специализированный PHP (или аналогичный) script, обслуживающий изображение, вам нужно убедиться, что заголовок HTTP Content-Type задан соответствующим типом MIME.

Если вы хотите избежать использования тега <img>, вы можете использовать <div> в сочетании с фоном CSS, но это не поможет, если браузер не распознает advertisements/12 как любой известный тип изображения.

Ответ 4

Я нашел себя с похожими проблемами просмотра изображений после переименования изображений, загруженных из веб-форм. Поскольку у меня было сочетание файлов gif, jpg, jpeg или png, я просмотрел свойства файла.

То, что я закончил, это проверка типа MIME (который обычно находится в массиве $_FILES при обработке загруженных файлов) и добавление связанного расширения в имя файла.

if($_FILES[$fieldname]['type'][$key]=='image/gif') {
     $ext='.gif';
}

if($_FILES[$fieldname]['type'][$key]=='image/jpeg') {
     $ext='.jpg';
}

if($_FILES[$fieldname]['type'][$key]=='image/pjpeg') {
     $ext='.jpg';
}

if($_FILES[$fieldname]['type'][$key]=='image/png') {
     $ext='.png';
}

Список распространенных типов mime-изображений.

- Что исправить мою проблему, поскольку мой браузер пытался загрузить мои изображения в виде двоичных файлов без расширения имени файла.

Сервер - Debian, Apache 2.2, PHP 5.3

Веб-клиент - Kubuntu 11.10, Firefox