ctebah / mimey
PHP package for converting file extensions to MIME types and vice versa.
Requires
- php: ^5.4|^7.0|^8.0
Requires (Dev)
- php-coveralls/php-coveralls: ^1.1
- phpunit/phpunit: ^4.8 || ^5.7 || ^6.5
This package is auto-updated.
Last update: 2026-04-13 20:41:43 UTC
README
PHP library for converting file extensions to MIME types and vice versa. Installable as ctebah/mimey on Packagist.
Repository: github.com/ctebah/mimey — public; clone https://github.com/ctebah/mimey.git or git@github.com:ctebah/mimey.git (matches origin).
This package is a maintained fork of ralouphie/mimey (same MIT license and original copyright; see license). Upstream mapping logic and API are preserved; the ctebah/mimey package exists so dependents (for example UFW) can require it from Packagist without a custom Composer repositories entry.
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.
Install
Requires PHP >= 5.4 (see composer.json).
composer require ctebah/mimey
Usage
$mimes = new \Mimey\MimeTypes; // Convert extension to MIME type: $mimes->getMimeType('json'); // application/json // Convert MIME type to extension: $mimes->getExtension('application/json'); // json
Getting All
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')
Custom Conversions
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'); ...
Optimized Custom Conversion Loading
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());