Simple PHP class for guessing file mime type based on file extension with ability to use in Symfony project.
Via Composer
$ composer require dfridrich/php-mime-type
// from string, can be used on non-existing files
echo \Defr\PhpMimeType\MimeType::get('index.php'); // outputs text/html
// from SplFileInfo
echo \Defr\PhpMimeType\MimeType::get(new \SplFileInfo('Video.avi')); // outputs text/html
// from SplFileObject
echo \Defr\PhpMimeType\MimeType::get(new \SplFileObject('Image.JPEG')); // outputs image/jpeg
// from string
echo \Defr\PhpMimeType\MimeType::get('someStrange.extension'); // outputs application/octet-stream
// Multiple files
$files = ['index.php', new \SplFileInfo('Video.avi'), new \SplFileObject('example.php')];
/** @var \Defr\PhpMimeType\MimeTypeInfo[] $mimeTypes */
$mimeTypes = \Defr\PhpMimeType\MimeType::multiple($files);
foreach ($mimeTypes as $mimeType) {
echo sprintf('File "%s" is mime type "%s"', $mimeType->getFileName(), $mimeType->getMimeType()).'<br>';
}
If you want to use Symfony response feature, install HTTP Foundation package too.
$ composer require symfony/http-foundation
Just pass the file name or SPL object to response method and you will get Symfony\Component\HttpFoundation\Response object. Disposition is attachment by default, you can chage it to inline or use Symfony ResponseHeaderBag's constants DISPOSITION_ATTACHMENT or DISPOSITION_INLINE.
// Return response to download this file as attachment (default)
$response = \Defr\PhpMimeType\MimeType::response(__FILE__);
$response->send();
// Return response to download this file inline
$response = \Defr\PhpMimeType\MimeType::response(__FILE__, \Symfony\Component\HttpFoundation\ResponseHeaderBag::DISPOSITION_INLINE);
$response->send();
// You can use FileAsResponse object too
$response = \Defr\PhpMimeType\FileAsResponse::get(__FILE__);
$response->send();
// Or directly send it to browser
$response = \Defr\PhpMimeType\FileAsResponse::send(__FILE__);
See more examples.
API documentation can be found here.
$ composer test
- Fork the project.
- Make your feature addition or bug fix.
- Add tests for it. This is important so I don't break it in a future version unintentionally.
- Commit just the modifications.
- Ensure your code is nicely formatted in the PSR-2 style and that all tests pass.
- Send the pull request.
- Check that the Travis CI build passed. If not, rinse and repeat.
- Dennis Fridrich
- Nick Shek
- Giso Stallenberg
Photo by freepik.com
The MIT License (MIT). Please see License File for more information.