---
title: "MIME Types"
description: "The MIME type of a file or of a content, and the types of an extension, with Mime"
type: "docs"
category: "doc"
tags: []
authors: [Anonymous]
date: "2026-11-05"
last_update: "2026-11-05"
time_minutes: 2
draft: false
unlisted: false
url: "https://www.derafu.dev/docs/core/file/mime-types"
---

# MIME Types

```php
use Derafu\File\Mime;
```

| Method | What it does |
| --- | --- |
| `Mime::fromFile($path)` | The MIME type of a file, by its content. |
| `Mime::fromContent($content)` | The MIME type of a content in memory. |
| `Mime::typesOfExtension($extension)` | The MIME types that an extension can have. |

What can not be told is `null`, not `false`, and none of them throws.

## Of a file

```php
Mime::fromFile('/var/app/uploads/document');   // 'application/pdf'
```

The type is detected by the **content** of the file, not by its name: an image named `photo.txt` is `image/jpeg`. A symbolic link is followed, and an empty file is `application/x-empty`. A content that has no known type is `application/octet-stream`.

It is `null` when the path is not a regular file that can be read (it does not exist, it is a directory, a broken link, a file without permission, an empty path or a path with a null character), or when the type can not be determined.

## Of a content

```php
Mime::fromContent($content);   // The same type as the file that has this content.
Mime::fromContent('');         // 'application/x-empty'
```

Only the content that is given is read, so it can be just the start of a file. That is enough for the formats that have a signature at the start (images, PDF, ZIP), but not for those that need the end of the file to be known: a `.docx` is detected as `application/zip` with only a start.

## Of an extension

```php
Mime::typesOfExtension('jpg');    // ['image/jpeg', 'image/pjpeg']
Mime::typesOfExtension('.CSV');   // ['text/csv', ...]
Mime::typesOfExtension('nope');   // []
```

An extension can have more than one type, as its aliases. The case and one leading point do not matter. An extension that is empty or unknown is the empty list.



---
Last updated on 05/11/2026

