Le WordPress d'aujourd'hui, décodé pour les développeurs

Erreurs WordPress · Médias et téléversement

Fichier trop volumineux : dépasse la limite de téléversement

Téléversement

Fichier trop volumineux dans WordPress, « dépasse la limite de téléversement » ou erreur 413 ? Réglez upload_max_filesize, post_max_size et nginx : pas à pas.

Message affiché

%s dépasse la limite de téléversement de ce site.

En anglais : %s exceeds the maximum upload size for this site.

Réponse rapide

Le fichier dépasse la plus basse des limites : upload_max_filesize, post_max_size, client_max_body_size (nginx) ou plafond du CDN. Relevez-les ensemble, avec post_max_size supérieur à upload_max_filesize, puis rechargez PHP et le serveur.

Vous glissez une image, une vidéo ou une archive dans la médiathèque, et WordPress refuse le fichier : « nom-du-fichier.jpg dépasse la limite de téléversement de ce site. », ou bien le navigateur affiche « 413 Request Entity Too Large », ou encore le téléversement échoue sans explication claire. La cause est toujours la même : le fichier est plus gros que la taille maximale acceptée par l’un des maillons de la chaîne (PHP, serveur web, WordPress lui-même, CDN ou pare-feu). L’erreur survient dans l’administration : médiathèque, éditeur de blocs, import de thème ou d’extension, formulaires de téléversement.

Ce que signifie cette erreur

Un téléversement traverse plusieurs limites successives, et c’est la plus basse qui l’emporte. La fonction wp_max_upload_size() de wp-includes/media.php renvoie le minimum entre les directives PHP upload_max_filesize (taille d’un fichier) et post_max_size (taille totale de la requête), puis la fait passer dans le filtre upload_size_limit. C’est cette valeur qu’affiche la médiathèque : « Taille de fichier maximale pour le téléversement : 2 Mo », par exemple. Le message avec le nom du fichier est produit côté navigateur par le téléverseur de wp-includes/script-loader.php (chaîne file_exceeds_size_limit) avant même l’envoi ; l’interface récente de l’éditeur affiche une variante : « nom-du-fichier.jpg : ce fichier dépasse la taille maximum de téléversement pour ce site. »

D’autres limites agissent plus en amont, sans que WordPress puisse les connaître. Le serveur web peut refuser la requête avant PHP : nginx répond 413 Request Entity Too Large quand le corps dépasse client_max_body_size (1 Mo par défaut), et Apache le fait avec la directive LimitRequestBody si elle est définie. Si post_max_size est dépassé, PHP vide silencieusement les données reçues et WordPress affiche : « Le fichier est vide. Veuillez téléverser quelque chose de plus substantiel. Cette erreur peut également être due au fait que les téléversements sont désactivés dans votre fichier php.ini ou que post_max_size est défini comme inférieur à upload_max_filesize dans php.ini. » (wp-admin/includes/file.php). Quand c’est upload_max_filesize qui est dépassé, le message devient : « Le fichier téléversé dépasse la directive upload_max_filesize dans php.ini. »

Sur un réseau multisite, une limite supplémentaire s’applique : le réglage réseau « Taille maximale des fichiers téléversés » (option fileupload_maxk, 1500 Ko par défaut). Le message est alors : « Ce fichier est trop grand. La taille des fichiers doit être inférieure à 1500 Ko. »

Diagnostic rapide

Symptôme / constatCause probableÀ vérifier
Message avec le nom du fichier avant tout envoi, ou « Taille de fichier maximale… » faibleupload_max_filesize ou post_max_size trop basSanté du site, onglet « Informations », section « Traitement des médias »
Page d’erreur « 413 Request Entity Too Large » ou téléversement qui échoue juste après l’envoiLimite du serveur web ou du proxy (client_max_body_size, LimitRequestBody)Journaux d’erreurs nginx ou Apache
« Le fichier est vide » alors que le fichier existepost_max_size inférieur à la taille du fichierValeur de post_max_size
Le téléversement s’arrête à environ 100 Mo derrière un CDNLimite de taille de requête de l’offre CDNPlan et règles du CDN ou du pare-feu
« Ce fichier est trop grand » sur un réseau multisiteRéglage réseau fileupload_maxkAdministration du réseau, paramètres

Les causes les plus fréquentes

  1. Les valeurs par défaut de PHP (souvent 2 Mo pour upload_max_filesize et 8 Mo pour post_max_size) sur un hébergement non réglé.
  2. Une limite plus basse côté serveur web : client_max_body_size absent ou trop petit dans nginx.
  3. post_max_size inférieur à upload_max_filesize, ce qui rend la seconde valeur inopérante.
  4. Une limite imposée par l’hébergeur, qu’un fichier .user.ini ou php.ini ne peut pas dépasser.
  5. Un pare-feu applicatif (ModSecurity), un CDN ou un proxy qui plafonne la taille des requêtes.
  6. Sur un réseau multisite, le plafond fileupload_maxk.

Solutions pas à pas

1. Vérifier la limite réelle

Dans l’administration, ouvrez Médias, puis Ajouter : la limite apparaît sous la zone de dépôt. Pour le détail, consultez Outils, Santé du site, onglet « Informations », section « Traitement des médias » : « Taille maximale autorisée pour les données des publications », « Taille maximale des fichiers téléversés » et « Taille de fichier effective maximale ». Avec WP-CLI, en lecture seule :

wp eval 'echo size_format( wp_max_upload_size() ) . PHP_EOL;'

2. Modifier la configuration PHP

Le réglage propre dépend de l’hébergement. Le panneau de l’hébergeur propose souvent un sélecteur PHP. Sinon, éditez le php.ini si vous y avez accès :

upload_max_filesize = 64M
post_max_size = 72M
memory_limit = 256M
max_execution_time = 300

Gardez toujours post_max_size supérieur à upload_max_filesize. Avec PHP-FPM ou CGI sur un mutualisé, créez plutôt un fichier .user.ini à la racine du site avec les mêmes lignes ; il est relu au bout de user_ini.cache_ttl secondes (300 par défaut). Avec Apache et PHP en module (mod_php), le .htaccess suffit :

php_value upload_max_filesize 64M
php_value post_max_size 72M
php_value max_execution_time 300

Attention : si PHP ne tourne pas en module Apache, les lignes php_value provoquent une erreur 500. Supprimez-les dans ce cas. Après une modification du php.ini principal, rechargez PHP-FPM ou Apache (par exemple systemctl reload php8.2-fpm, selon votre version).

3. Relever la limite du serveur web

Sous nginx, ajoutez la directive dans le bloc http, server ou location concerné, puis testez et rechargez :

client_max_body_size 72M;

nginx -t && systemctl reload nginx

Sous Apache, vérifiez qu’aucune directive LimitRequestBody ne plafonne la requête, dans la configuration du site ou dans un .htaccess :

# 0 = illimité (valeur par défaut)
LimitRequestBody 0

Si un proxy ou un CDN se trouve devant le serveur, vérifiez sa limite propre : Cloudflare plafonne par exemple le corps des requêtes à 100 Mo sur les offres gratuite et Pro. Dans ce cas, contournez le CDN pour les téléversements ou passez par la solution 5.

4. Multisite : relever le plafond du réseau

Dans l’administration du réseau, ouvrez Réglages, Paramètres du réseau, et modifiez « Taille maximale des fichiers téléversés » (en Ko). Cette limite s’ajoute à celles de PHP : elle ne les remplace pas.

5. Contourner la limite pour un fichier ponctuel

Pour un fichier isolé (vidéo, archive, import volumineux), déposez-le par SFTP dans wp-content/uploads, puis enregistrez-le dans la médiathèque avec WP-CLI :

wp media import /chemin/vers/video.mp4 --title="Présentation"

Plus durablement, évitez d’héberger les grosses vidéos sur WordPress : un service de streaming ou un stockage objet est plus adapté. Notre article sur le fichier qui dépasse la taille maximale et ses quatre réglages approfondit ce point, comme celui consacré à l’erreur 413 lors d’un import de médias.

6. Réduire le fichier

Compressez et redimensionnez les images avant l’envoi (un appareil photo produit souvent des fichiers de plusieurs mégaoctets pour un affichage de quelques centaines de pixels), convertissez-les en WebP ou AVIF, et compressez les PDF. C’est souvent la solution la plus simple, et elle améliore la performance du site.

Prévenir l’erreur

  • Réglez upload_max_filesize et post_max_size dès la mise en place d’un nouveau serveur, avec une marge raisonnable (64 Mo suffisent à la plupart des sites éditoriaux).
  • Documentez la chaîne complète des limites : PHP, serveur web, proxy ou CDN, et pare-feu.
  • Contrôlez le poids des médias avant publication, par exemple avec notre astuce pour afficher le poids total des médias d’un article.
  • Laissez les très gros fichiers à un stockage dédié plutôt qu’à la médiathèque.
  • Après toute migration d’hébergeur, revérifiez les limites dans Santé du site.

FAQ

Pourquoi la limite reste-t-elle basse après avoir modifié le php.ini ?

Plusieurs causes possibles : PHP n’a pas été rechargé, vous avez modifié un fichier qui n’est pas celui utilisé (comparez avec le chemin affiché par php --ini ou par phpinfo()), un .user.ini est encore en cache, ou la limite vient du serveur web ou de l’hébergeur.

Quelle valeur choisir pour post_max_size ?

Une valeur légèrement supérieure à upload_max_filesize, car la requête contient le fichier et des données de formulaire. Pour téléverser 64 Mo, 72 Mo conviennent.

Puis-je dépasser la limite avec le filtre upload_size_limit ?

Non. Ce filtre ne modifie que la valeur affichée et contrôlée par WordPress ; PHP et le serveur web continuent d’appliquer leurs propres limites.

Que signifie l’erreur 413 ?

Le serveur web ou un proxy a refusé la requête parce que son corps dépasse la taille autorisée, avant que WordPress ne la reçoive. Relevez client_max_body_size sous nginx ou contrôlez LimitRequestBody sous Apache.