|Classes of Sascha Greuel||>||PHP MIME Type to Extension Detector||>||README.md||>||Download|
PHP Mime Detector
Detecting the real type of (binary) files doesn't have to be hard. Checking a file's extension is not reliable and can cause serious security issues.
This package helps you to determine the correct type of files, by reading it byte for byte (up to 4096) and check for magic numbers#Magic_numbers_in_files).
However, this package isn't a replacement for any security software. It just aims to produce less false positives, than a simple extension check would produce.
A list of supported file types can be found on this Wiki page.
__Why a separate class?__
You may wonder why we don't just rely on extensions like Fileinfo? First off all, a short background story:
We are building extensions and applications for an Open Source PHP Framework, thus we are creating web software for the masses. Many of our customers and/or users of our free products are on shared hosting without any possibility to install or manage installed PHP extensions. So our goal is to develop solutions with as few dependencies as necessary, but with as much functionality as possible.
While developing a solution, that allows people to convert HEIF/HEIC files to a more "standardized" format (using our own, external API), we had troubles detecting these files, because especially this format isn't known by most Webservers, yet. While checking the file extension isn't reliable, we had to find a reusable solution that works for most of our clients. So we started to build a magic number based check for these files. That was the birth of our Mime Detector.
__Why are the unit tests so poorly written?__
Short answer: I have just little experience in unit testing. This project was a good training and even if the unit tests could be better: I am proud of my progress :)
If you are looking for a solution that works on older PHP versions (5.3.2+), head over to the oldphp branch.
Require this package using Composer, in the root directory of your project:
Here is an example on how this package makes it very easy to determine the mime type (and it's corresponding file extension) of a given file:
Testing utilizes PHPUnit (what else?) by running this command:
However, you may check out a bunch of test files for a full test. Test files are no longer included in the composer package nor the Git repository itself, so you have to perform a checkout of this repository and install it's submodules:
When done, perform a
Please see CONTRIBUTING for details.
When adding new detections, please make sure to provide at least one sample file.
Free Software, Hell Yeah!