esi / mimey
PHP package for converting file extensions to MIME types and vice versa.
Fund package maintenance!
ko-fi.com/ericsizemore
ericsizemore
Tidelift
Installs: 3 879
Dependents: 1
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 86
Open Issues: 1
Requires
- php: ^8.2 <8.5
Requires (Dev)
- esi/phpunit-coverage-check: ^2.0
- friendsofphp/php-cs-fixer: ^3.54
- phpstan/extension-installer: ^1.2
- phpstan/phpstan: ^1.11
- phpstan/phpstan-deprecation-rules: ^1.2
- phpstan/phpstan-phpunit: ^1.4
- phpstan/phpstan-strict-rules: ^1.6
- phpunit/phpunit: ^11.1
- psalm/plugin-phpunit: ^0.19.0
- vimeo/psalm: dev-master
Suggests
- ext-mbstring: For non-English (user) input parsing
- v2.1.0
- dev-develop / 2.0.x-dev
- v2.0.0
- 1.2.x-dev
- v1.2.1
- v1.2.0
- v1.1.1
- v1.1.0
- v1.0.0
- dev-renovate/friendsofphp-php-cs-fixer-3.x-lockfile
- dev-renovate/phpunit-phpunit-11.x-lockfile
- dev-renovate/esi-phpunit-coverage-check-3.x
- dev-renovate/psalm-plugin-phpunit-0.x-lockfile
- dev-renovate/lock-file-maintenance
This package is auto-updated.
Last update: 2025-01-30 21:29:55 UTC
README
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. Click here to view the changelog from their svn: changelog
The mime.types
file is parsed by bin/generate.php
and converted into an optimized JSON object in dist/mime.types.min.json
which is then wrapped by helper class MimeTypes
.
Also provides a generated PHP enum with all mime types and methods to get the extension. Can also be used to get the enum value from an extension.
Installation
Compatible with PHP >= 8.2 and can be installed with Composer.
$ composer require esi/mimey
Usage
$mimes = new MimeTypes; // Convert extension to MIME type: $mimes->getMimeType('json'); // application/json // Convert MIME type to extension: $mimes->getExtension('application/json'); // json
Using the enum
$json = MimeType::ApplicationJson; echo $json->getExtension(); // json echo $json->value; // application/json $html = MimeType::fromExtension('html'); echo $html->value; // text/html MimeType::fromExtension('asdf'); // throws an InvalidArgumentException if the extension cannot be found
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 Mapping\Builder
that can help with this:
use Esi\Mimey\Mapping\Builder; // Create a builder using the built-in conversions as the basis. $builder = Builder::create(); // Add a conversion. This conversion will take precedence over existing ones. $builder->add('custom/mime-type', 'myextension'); $mimes = new 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($cacheFilePath);
The file can then be loaded to avoid overhead of repeated $builder->add(...)
calls:
// Load the conversions from a cached file. $builder = Builder::load($cacheFilePath); $mimes = new MimeTypes($builder->getMapping());
About
Requirements
- Mimey works with PHP 8.2.0 or above.
Credits
- Author: Eric Sizemore
- Thanks to all Contributors.
- Special thanks to JetBrains for their Licenses for Open Source Development.
Esi\Mimey
would not be possible without the wonderful work of the libraries that came before it, which it is forked from:
My thanks to them, and all their contributors. To view changes in this library in comparison to the original library, please see the CHANGELOG.md file.
Contributing
Missing a MIME type?
Open an issue or even add it yourself! The process is very easy:
- fork this repository
- add your MIME type to the
data/mime.types.custom
file (make sure it's properly formatted!) - push your changes
- submit a pull request
See CONTRIBUTING for more information.
Bugs and feature requests are tracked on GitHub.
Contributor Covenant Code of Conduct
Backward Compatibility Promise
See backward-compatibility.md for more information on Backwards Compatibility.
Changelog
See the CHANGELOG for more information on what has changed recently.
License
See the LICENSE for more information on the license that applies to this project.
Security
See SECURITY for more information on the security disclosure process.
Upgrading
See UPGRADING for more information on the upgrade process.