Skip to content

unit27/mimey

Repository files navigation

Mimey

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.

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());

Install

Compatible with PHP >= 8.0.

composer require unit27/mimey

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages