# « Vous n’avez pas l’autorisation de téléverser ce type de fichier »

> Type de fichier non autorisé dans WordPress (SVG, JSON, WebP, polices) ? Comprenez le contrôle MIME et autorisez le type avec upload_mimes, sans risque.

- Auteur : WordPress Développement
- Publié le : 2026-10-02
- Mis à jour le : 2026-10-02
- URL : https://www.wpmoderne.fr/erreurs-wordpress/type-fichier-non-autorise/

> WordPress refuse une extension absente de sa liste de types autorisés, ou un fichier dont le contenu ne correspond pas à l’extension. Ajoutez le type avec le filtre upload_mimes, ou convertissez le fichier dans un format accepté.

Vous téléversez un fichier SVG, JSON, une police `.woff2`, une archive ou un document, et WordPress répond « Désolé, vous n’avez pas l’autorisation de téléverser ce type de fichier. » L’envoi est refusé avant même d’être enregistré. L’erreur apparaît dans l’administration (médiathèque, éditeur de blocs, import de thème ou d’extension, champ de fichier d’une extension) et jamais côté visiteur.

Ce refus n’est pas un problème de taille (voir la fiche [fichier trop volumineux](https://www.wpmoderne.fr/erreurs-wordpress/fichier-trop-volumineux/)) ni de droits d’écriture sur le serveur (voir [impossible de créer le dossier](https://www.wpmoderne.fr/erreurs-wordpress/impossible-creer-dossier/)). Il s’agit d’une règle de sécurité : WordPress n’accepte que les types de fichiers qu’il connaît et dont le contenu correspond à l’extension annoncée.

## Ce que signifie cette erreur

Au moment du téléversement, la fonction `wp_handle_upload()` (`wp-admin/includes/file.php`) appelle `wp_check_filetype_and_ext()` (`wp-includes/functions.php`). Cette fonction procède en trois temps. Elle compare d’abord l’extension du fichier à la liste des types autorisés, fournie par `get_allowed_mime_types()` et filtrable avec `upload_mimes`. Elle examine ensuite le contenu réel du fichier : pour une image, `wp_get_image_mime()` ; pour les autres fichiers, l’extension PHP `fileinfo`. Elle vérifie enfin que le type détecté est cohérent avec l’extension. Si l’extension est inconnue ou si le contenu ne correspond pas, le type est écarté et l’erreur est renvoyée.

Plusieurs particularités expliquent des refus surprenants. La liste d’origine du cœur ne contient ni SVG, ni JSON, ni polices web : ces types sont refusés tant qu’on ne les autorise pas. Les types `swf` et `exe` sont toujours retirés, et les fichiers `htm`, `html` et `js` ne sont acceptés que pour un utilisateur disposant de la capacité `unfiltered_html` (`get_allowed_mime_types()`). Un fichier renommé (un PNG nommé `.jpg`, un tableur enregistré avec une mauvaise extension) échoue au contrôle de contenu. Les requêtes REST et `wp_upload_bits()` produisent le même message (`wp-includes/functions.php`).

Seule la capacité `unfiltered_upload` contourne la vérification. Elle n’est accordée que si la constante `ALLOW_UNFILTERED_UPLOADS` vaut `true` dans `wp-config.php` et, sur un réseau multisite, uniquement aux super-administrateurs (`wp-includes/capabilities.php`). Sur un réseau, le réglage « Types des fichiers téléversés » de l’administration du réseau ajoute un filtre supplémentaire (`check_upload_mimes()`, `wp-includes/ms-functions.php`).

## Diagnostic rapide

| Symptôme / constat | Cause probable | À vérifier |
| --- | --- | --- |
| Refus d’un fichier `.svg`, `.json`, `.woff2` ou d’un format récent | Type absent de la liste du cœur | Résultat de `wp_check_filetype()` pour ce nom de fichier |
| Un fichier ordinaire (image, PDF) est refusé alors que son type est autorisé | Extension qui ne correspond pas au contenu réel | Ouvrir le fichier, l’exporter à nouveau dans le bon format |
| Refus d’un fichier `.html` ou `.js` pour un auteur ou un contributeur | Capacité `unfiltered_html` absente | Rôle de l’utilisateur ; test avec un compte administrateur |
| Refus d’un type pourtant autorisé sur un réseau multisite | Réglage « Types des fichiers téléversés » du réseau | Administration du réseau, Réglages, Paramètres du réseau |
| Le message apparaît seulement pour certains comptes | Filtre `upload_mimes` conditionné au rôle, ou extension de sécurité | Code du thème ou des extensions qui utilisent `upload_mimes` |

## Les causes les plus fréquentes

1. Un format non prévu par le cœur : SVG, JSON, polices web, formats vectoriels ou propriétaires.
2. Une extension de fichier trompeuse : image enregistrée sous une mauvaise extension, document converti sans changer le nom.
3. Un utilisateur sans la capacité `unfiltered_html` qui téléverse du HTML ou du JavaScript.
4. Sur multisite, une liste de types autorisés trop courte dans les paramètres du réseau.
5. Un code personnalisé ou une extension de sécurité qui restreint `upload_mimes`.

## Solutions pas à pas

### 1. Identifier ce que WordPress voit

Avant de modifier quoi que ce soit, vérifiez comment WordPress classe le fichier. Cette commande WP-CLI ne modifie rien et indique l’extension et le type retenus (des valeurs vides ou fausses signifient que le type est inconnu) :

```
wp eval 'print_r( wp_check_filetype( "fichier.svg" ) );'
file --mime-type fichier.svg
```

La seconde commande, exécutée sur un poste ou un serveur Linux, affiche le type réel du contenu. Si le type réel diffère de l’extension, passez à la solution 2.

### 2. Corriger un fichier mal nommé ou mal enregistré

Rouvrez le fichier dans son logiciel d’origine et exportez-le dans le format voulu (« Enregistrer sous » ou « Exporter »). Renommer simplement une extension ne suffit pas : WordPress lit le contenu. Pour les images dont l’extension ne correspond pas au format réel, WordPress peut corriger lui-même le nom lorsqu’il reconnaît le format, mais il refuse les autres cas par prudence. Si le format est inutilement exotique, convertissez-le (JPEG, PNG ou WebP pour une image, PDF pour un document).

### 3. Autoriser un type de fichier de façon ciblée

C’est la méthode recommandée : on déclare exactement le type voulu, pas davantage. Créez un fichier `wp-content/mu-plugins/autoriser-types.php` (ou ajoutez le code au `functions.php` d’un thème enfant). Cet exemple autorise les fichiers JSON pour les seuls administrateurs :

```
<?php
// wp-content/mu-plugins/autoriser-types.php
add_filter( 'upload_mimes', function ( $mimes ) {
	if ( current_user_can( 'manage_options' ) ) {
		$mimes['json'] = 'application/json';
	}
	return $mimes;
} );

// Le contrôle de contenu peut encore refuser le fichier : on le valide ici.
add_filter( 'wp_check_filetype_and_ext', function ( $data, $file, $filename, $mimes, $real_mime ) {
	if ( ! empty( $data['ext'] ) && ! empty( $data['type'] ) ) {
		return $data;
	}
	$ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
	if ( 'json' === $ext && current_user_can( 'manage_options' ) ) {
		return array( 'ext' => 'json', 'type' => 'application/json', 'proper_filename' => false );
	}
	return $data;
}, 10, 5 );
```

Adaptez l’extension et le type MIME à votre besoin. Le premier filtre inscrit le format dans la liste ; le second évite un rejet lorsque `fileinfo` détecte un type générique (`text/plain`, par exemple) qui ne correspond pas exactement. Pour le SVG, qui peut contenir du script, ne l’autorisez jamais sans nettoyage du fichier : notre article [autoriser le SVG dans la médiathèque sans faille](https://www.wpmoderne.fr/tips/autoriser-svg-mediatheque-sans-faille/) explique la méthode sûre. Pour comprendre la fonction de contrôle elle-même, voyez aussi [vérifier l’extension d’un fichier avec wp_check_filetype()](https://www.wpmoderne.fr/tips/wp-check-filetype-verifier-extension-fichier/).

### 4. Vérifier le rôle de l’utilisateur

Pour un fichier HTML ou JavaScript refusé à un auteur ou à un contributeur, c’est la capacité `unfiltered_html` qui manque : sur un site simple, seuls les rôles Administrateur et Éditeur la possèdent (elle est retirée à tous si la constante `DISALLOW_UNFILTERED_HTML` est définie, et, sur multisite, à tous sauf aux super-administrateurs). Faites téléverser le fichier par un compte autorisé plutôt que d’élargir les droits.

### 5. Multisite : compléter la liste du réseau

Dans l’administration du réseau, ouvrez Réglages, Paramètres du réseau, puis complétez « Types des fichiers téléversés » en séparant les extensions par des espaces (par exemple `jpg jpeg png gif pdf`). Cette liste restreint celle du cœur : elle sélectionne, parmi les types déjà autorisés, ceux dont l’extension y figure.

### 6. Dernier recours : désactiver le contrôle

La constante `ALLOW_UNFILTERED_UPLOADS` supprime tout contrôle de type pour les administrateurs. Sauvegardez d’abord le site, et n’utilisez ce réglage que de manière temporaire :

```
// wp-config.php, avant « That's all, stop editing! »
define( 'ALLOW_UNFILTERED_UPLOADS', true );
```

Effectuez votre téléversement, puis **supprimez immédiatement la ligne**. Laisser cette constante active permet de déposer un fichier PHP dans la médiathèque et ouvre la porte à une prise de contrôle du site ; notre article sur le [blocage des fichiers exécutables dans un formulaire](https://www.wpmoderne.fr/securite/bloquer-upload-fichiers-executables-formulaire-candidature/) montre les conséquences. Sans accès à l’administration, toutes ces modifications se font par SFTP ou depuis le gestionnaire de fichiers de l’hébergeur.

## Prévenir l’erreur

- Autorisez les types au cas par cas avec `upload_mimes`, réservez-les aux rôles qui en ont besoin et documentez chaque ajout.
- Faites nettoyer tout fichier pouvant contenir du code (SVG notamment) avant de l’accepter.
- Exportez les fichiers dans des formats courants plutôt que de renommer leurs extensions.
- N’activez jamais `ALLOW_UNFILTERED_UPLOADS` de façon permanente en production.
- Passez en revue les extensions de formulaire qui acceptent des téléversements : voir notre [checklist de sécurisation des téléversements REST](https://www.wpmoderne.fr/securite/securiser-televersements-rest-checklist/).

## FAQ
