PHP package for converting file extensions to MIME types and vice versa.
This package uses httpd's mime.types to generate a mapping of file extension to MIME type and the other way around.
The mime.types
file is parsed by bin/generate.php
and converted into an optimized PHP array in mime.types.php
which is then wrapped by helper class \Mimey\MimeTypes
.
$mimes = new \Mimey\MimeTypes;
// Convert extension to MIME type:
$mimes->getMimeType('json'); // application/json
// Convert MIME type to extension:
$mimes->getExtension('application/json'); // json
It's rare, but some extensions have multiple MIME types:
// Get all MIME types for an extension:
$mimes->getAllMimeTypes('wmz'); // array('application/x-ms-wmz', 'application/x-msmetafile')
However, there are many MIME types that have multiple extensions:
// Get all extensions for a MIME type:
$mimes->getAllExtensions('image/jpeg'); // array('jpeg', 'jpg', 'jpe')
You can add custom conversions by changing the mapping that is given to MimeTypes
.
There is a MimeMappingBuilder
that can help with this:
// Create a builder using the built-in conversions as the basis.
$builder = \Mimey\MimeMappingBuilder::create();
// Add a conversion. This conversion will take precedence over existing ones.
$builder->add('custom/mime-type', 'myextension');
$mimes = new \Mimey\MimeTypes($builder->getMapping());
$mimes->getMimeType('myextension'); // custom/mime-type
$mimes->getExtension('custom/mime-type'); // myextension
You can add as many conversions as you would like to the builder:
$builder->add('custom/mime-type', 'myextension');
$builder->add('foo/bar', 'foobar');
$builder->add('foo/bar', 'fbar');
$builder->add('baz/qux', 'qux');
$builder->add('cat/qux', 'qux');
...
You can optimize the loading of custom conversions by saving all conversions to a compiled PHP file as part of a build step.
// Add a bunch of custom conversions.
$builder->add(...);
$builder->add(...);
$builder->add(...);
...
// Save the conversions to a cached file.
$builder->save($cache_file_path);
The file can then be loaded to avoid overhead of repeated $builder->add(...)
calls:
// Load the conversions from a cached file.
$builder = \Mimey\MimeMappingBuilder::load($cache_file_path);
$mimes = new \Mimey\MimeTypes($builder->getMapping());
You can rename the included mime.types.custom.example
to mime.types.custom
and recompile. the custom entries always take precedence over built-in defitions.
In case there is a update in the httpd defined types you can run bin/pull.php
in this repo to pull new mime files and compile them
Compatible with PHP >= 5.4.
composer require xantios/mimey
Original version created by rodolfoberrios