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 383
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
This package is auto-updated.
Last update: 2024-11-13 14:55:17 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.
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());
Install
Compatible with PHP >= 8.2.
composer require esi/mimey
Credits
This fork uses the same license as the original repository by @ralouphie (MIT). This repository is a fork of elephox-dev/mimey which itself was a fork of ralouphie/mimey. Thanks to them and all the contributors!
Submitting bugs and feature requests
Bugs and feature requests are tracked on GitHub
Issues are the quickest way to report a bug. If you find a bug or documentation error, please check the following first:
- That there is not an Issue already open concerning the bug
- That the issue has not already been addressed (within closed Issues, for example)
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
More information for contributions in CONTRIBUTING.
Author
Eric Sizemore - admin@secondversion.com - https://www.secondversion.com
License
Mimey is licensed under the MIT License - see the LICENSE.md
file for details.