Intereting Posts
MySQL и PHP: поиск по нескольким ключевым словам PHP: не удается отправить ошибку cookie сеанса Обновление нескольких строк в Codeigniter Как удалить файл на стороне клиента с помощью PHP? Регулярное выражение для 7-12 цифр; может содержать пробел или дефис как отформатировать электронную почту php Устаревший: функция split () устарела. Как переписать это заявление? Кэширование с помощью PHP для снятия стресса с MySQL Каков наилучший способ проверить, существует ли таблица в DynamoDB? получать данные из текстовой области и размещать на стене onfacebook Недопустимый номер параметра, состояние SQL S1093 php odbc mssql Создание массива из многомерного массива Предотвращение загрузки из удаленного источника, если размер файла больше заданного размера Используйте preg_match, чтобы узнать, содержит ли строка теги скриптов Как преобразовать базу данных MySQL в SQLite в PHP?

PHP, отображение изображения с заголовком ()

Я показываю изображения вне моего веб-корня, например:

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

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

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

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

Related of "PHP, отображение изображения с заголовком ()"

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

 $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; default: } header('Content-type: ' . $ctype); 

(Примечание: правильным типом содержимого для файлов JPG является image/jpeg )

Лучше всего определить тип изображения. с exif_imagetype

Если вы используете эту функцию, вы можете указать реальное расширение изображения.

с этой функцией расширение имени файла совершенно не имеет значения, что хорошо.

 function set-header-content-type($file) { //Number to Content Type $ntct = Array( "1" => "image/gif", "2" => "image/jpeg", #Thanks to "Swiss Mister" for noting that 'jpg' mime-type is jpeg. "3" => "image/png", "6" => "image/bmp", "17" => "image/ico"); header('Content-type: ' . $ntct[exif_imagetype($file)]); } 

Вы можете добавить другие типы из ссылки .

Надеюсь, поможет.

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

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

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

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

Хотя это странно названо, вы можете использовать getimagesize() . Это также даст вам информацию о mime:

 Array ( [0] => 295 // width [1] => 295 // height [2] => 3 // http://php.net/manual/en/image.constants.php [3] => width="295" height="295" // width and height as attr's [bits] => 8 [mime] => image/png ) 

если вы знаете имя файла, но не знаете расширения файла, вы можете использовать эту функцию:

 public function showImage($name) { $types = [ 'gif'=> 'image/gif', 'png'=> 'image/png', 'jpeg'=> 'image/jpeg', 'jpg'=> 'image/jpeg', ]; $root_path = '/var/www/my_app'; //use your framework to get this properly .. foreach($types as $type=>$meta){ if(file_exists($root_path .'/uploads/'.$name .'.'. $type)){ header('Content-type: ' . $meta); readfile($root_path .'/uploads/'.$name .'.'. $type); return; } } } 

Примечание. Правильный тип содержимого для файлов JPG – image/jpeg .