Php file type headers

Like my Create a Basic Web Service Using PHP, MySQL, XML, and JSON illustrates, even though a file’s extension ends in PHP, you can still tell the browser that you’re outputting a different content type. Here are a few of the more popular content types used on the internet.

Atom

header('Content-Type: application/atom+xml');

CSS

header('Content-Type: text/css');

Javascript

header('Content-Type: text/javascript');

JPEG Image

header('Content-Type: image/jpeg');

JSON

header('Content-Type: application/json');

PDF

header('Content-Type: application/pdf');

RSS

header('Content-Type: application/rss+xml; charset=ISO-8859-1');

Text (Plain)

header('Content-Type: text/plain');

XML

header('Content-Type: text/xml');

Just because a file ends in .PHP doesn’t mean it responds with XHTML — respond however you’d like!

Recent Features

Create Spinning Rays with CSS3: Revisited

Create Spinning Rays with CSS3: Revisited

fetch API

fetch API

Incredible Demos

CSS Text Overlap

CSS Text Overlap

CSS pointer-events

CSS pointer-events

Discussion

Great list of mime types.
Perhaps I’d just be careful about the charset at the RSS example. People could add it blindly and suddenly accented characters would stop working if the rest of the site is using other encodings, like utf-8.

Interesting list. Nothing new, but still nice. BTW Javascript and XML should be application, text is obsolete.

Читайте также:  Auto python code suggestions

Источник

Работа с MIME-типами в PHP

«Internet Media Types» или «Медиа типы» — является стандартом RFC 6838, который описывает формат файла. Причем браузеры используют MIME-типы в качестве основного критерия, не воспринимая расширения файлов.

MIME-тип состоит из типа и подтипа — двух значений разделённых « / », без использования пробелов и в нижнем регистре, например HTML страница:

Полный список MIME типов можно посмотреть тут.

К медиа типу может быть добавлен параметр для указания дополнительных деталей (например кодировка):

Как узнать MIME-тип загруженного файла

При загрузке файла через форму, MIME-тип файла доступен в массиве $_FILES , например:

Для определения MIME уже загруженного файла существует PHP-функция mime_content_type().

echo mime_content_type(__DIR__ . '/image.png'); // image/png echo mime_content_type(__DIR__ . '/text.txt'); // text/plain

При работе с изображениями, MIME-тип можно получить с помощью функции getimagesize():

$filename = __DIR__ . '/image.png'; $info = getimagesize($filename); print_r($info);

Результат:

Array ( [0] => 221 [1] => 96 [2] => 3 [3] => width="221" height="96" [bits] => 8 [mime] => image/png )

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

Отправка файлов из PHP

В PHP-скриптах, перед отправкой файлов клиенту, необходимо отправлять заголовок Content-Type , например файл XML:

$content = '. '; header("Content-Type: text/xml; charset=utf-8"); echo $content; exit();
$file = ROOT_DIR . '/market.zip'; header('Content-type: application/zip'); header('Content-Transfer-Encoding: Binary'); header('Content-length: ' . filesize($file)); header('Content-disposition: attachment; filename="' . basename($file) . '"'); readfile($file); exit();

Вывод изображения в зависимости от расширения файла:

$filename = __DIR__ . '/image.png'; $ext = mb_strtolower(mb_substr(mb_strrchr($filename, '.'), 1)); switch ($ext) < case 'png': header('Content-type: image/png'); break; case 'jpg': case 'jpeg': header('Content-type: image/jpeg'); break; case 'gif': header('Content-type: image/gif'); break; case 'wepb': header('Content-type: image/webp'); break; >readfile($filename); exit();

Источник

Работа с MIME на PHP

Работа с MIME на PHP

«Internet Media Types» или «Медиа типы» — является стандартом RFC 6838, показывающий браузеру формат загружаемого файла. Почти все современные браузеры проверяют MIME-тип файла в качестве основного показателя определения расширения файла. MIME-типы используются при создании корпоративных сайтов и разработке сложных интернет-магазинов где нужно загружать или скачивать документы, прайсы, и другие файлы. MIME-тип состоит из двух частей разделённых косой линией «/», в нижнем регистре и без пробелов Также к медиа типу можно добавить дополнительный параметр для указания например кодировки: text/html; charset=utf-8

Определение MIME-типа загруженного файла

Для того чтобы узнать MIME уже загруженного файла в PHP существует функция mime_content_type().
Для получения MIME-типа изображения используется функция getimagesize():

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

Отправка файла через PHP

В PHP, перед отправкой файлов через браузер на уровне клиента, необходимо формировать заголовок Content-Type:
Архив ZIP:
Определяем расширение файла изображения и выводим его с соответствующим заголовоком:

Источник

Adding Content-Type Header from PHP

How to correctly output different content-types using the PHP header function.

HTTP, Content-Type Header.

Adding the right Content-Type header is important for PHP applications to function properly. Yet, surprisingly many still do not add the correct character encoding for the type of content they wish to deliver.

In some cases, people even choose to replace certain characters with HTML encoded alternatives, rather than learn how to properly pick and implement an appropriate character encoding.

In todays globalized world, supporting multiple languages from the beginning of new projects is generally a good practice. It can be difficult to tell when you might need to support special characters from other languages, and so, supporting UTF-8 from the start is a good idea.

For example, to support Danish letters (Æ, Ø, and Å, you can use UTF-8 in the Content-Type header field.

header('Content-Type: text/html; charset=utf-8'); 

To add a content-type, we can use PHP’s header function.

Examples of Mime-Types

The mime-type should be placed before the character encoding. In the above example, we simply use text/html – but there are many others! I included some commonly used ones below:

text/html For .html pages (Note. Extensions are optional on the web).
text/plain Plain text files. If HTML pages are delivered with this, the HTML-source will be shown, without syntax-highlighting.
image/jpeg JPEG images. It is possible to output images with PHP as well.
image/png PNG images. You can also output PNG images in PHP.
image/webp WebP images. Compression is superior to PNG and JPG.
image/avif A1/AVIF images. Compression is superior to most other formats, including WebP.
video/mp4 Video format. Useful for streaming.
text/javascript JavaScript files. Usef for client-sided scripting.
text/css CSS files. Used to control the styling of web pages.
application/pdf Used to deliver .pdf files. Yes! You may also create .pdf’s in PHP!

It is important you choose the correct mime-type in order for a browser to know how to display the content. PHP does not just deliver HTML and text pages, it can also show images and video!

Character encoding in meta is not necessary

If you expect users to save your web pages locally, then you should be aware that some systems might not save the file in the correct character encoding. In these cases, you can include a meta element in your HTML, declaring the character encoding of the file:

meta http-equiv="Content-type" content="text/html; charset=utf-8"> 

If there is a miss-match between the Content-Type declared in your meta element and your HTTP headers, a HTML validator will show a error similar to the below:

The character encoding specified in the HTTP header (iso-8859-1) is different from the value in the element (utf-8).

The solution to this problem is to always make sure both your meta, and HTTP header Content-Type match.

Your CMS should automatically do this for you, but sometimes it may be bugged, or the server might not be configured correctly. Shared hosting solutions can be very bad. It is probably best to host a server on your own, either using a cloud service provider, or on a physical server you own yourself.

Источник

Оцените статью