Usage
Detect MIME-Type
The following illustrates a few ways that you can use the Detector
component to detect the MIME-type of a file.
Via stream
$file = fopen('my-picture.jpg', 'rb');
$mimeType = (new Detector())->detect($file);
echo (string) $mimeType; // image/jpeg
Via string
$content = file_get_contents('my-picture.jpg');
$mimeType = (new Detector())->detect($content);
echo (string) $mimeType; // image/jpeg
Via path
$path = 'my-picture.jpg';
$mimeType = (new Detector())->detectForFile($path);
echo (string) $mimeType; // image/jpeg
Using a different profile
If you have multiple "profiles", you can choose to specify what profile to use for the detection. This is applicable for both the detect()
and detectForFile()
method.
// Specify profile as 2nd argument
$mimeType = (new Detector())->detect($file, 'my-profile');
// Or...
$mimeType = (new Detector())->detectForFile($path, 'my-profile');
Overwrite profile options
Alternatively, you may choose to specify custom options for a single detection. This is also applicable for both detection methods.
// Custom options for the "profile"
$mimeType = (new Detector())->detect($file, 'my-profile', [
'sample_size' => 5 * 1024 * 1024,
]);
// Or...
$mimeType = (new Detector())->detectForFile($path, 'my-profile', [
'sample_size' => 5 * 1024 * 1024,
]);
MimeType
object
The The MimeType
object that is returned by the detect()
or detectForFile()
method contains information about a file's MIME-type.
print_r($mimeType);
Aedart\MimeTypes\MimeType Object
(
[description] => JPEG image data, JFIF standard 1.01, resolution (DPI),...
[mime] => image/jpeg; charset=binary
[type] => image/jpeg
[encoding] => binary
[known_extensions] => Array
(
[0] => jpeg
[1] => jpg
[2] => jpe
[3] => jfif
)
)
Properties
You can obtain individual properties via their accessor methods:
$type = $mimeType->type();
$description = $mimeType->description();
$encoding = $mimeType->encoding();
// ... etc
For a complete list of available methods, please review \Aedart\Contracts\MimeTypes\MimeType
.
When MIME-type not detected
Caveat
If a MIME-type cannot be detected by detect()
or detectForFile
, then you will still receive a MimeType
instance. But, all of its properties will be null
!
To test if a returned MimeType
instance contains an actual MIME-type, use the isValid()
method:
if ($mimeType->isValid()) {
echo $mimeType->type(); // text/plain
} else {
echo $mimeType->type(); // null
}
Inside Laravel
When situated inside a regular Laravel application, then you can obtain the Detector
instance by using the MimeTypeDetectorTrait
. For instance, if you need to detect a file's MIME-type inside a controller:
use Aedart\MimeTypes\Traits\MimeTypeDetectorTrait;
class MyController {
use MimeTypeDetectorTrait;
public function index()
{
$detector = $this->getMimeTypeDetector();
// ... remaining not shown ...
}
}