HOWTO · PHP
Taille maximale de téléversement en PHP
Cet article explique comment augmenter la taille maximale des téléversements en PHP.
Sur cette page
Pour accepter des téléversements plus volumineux, augmentez la limite par fichier de PHP upload_max_filesize et réglez post_max_size assez haut pour couvrir la requête entière. Commencez par identifier la configuration PHP utilisée par le processus qui reçoit le téléversement, puis appliquez-y les réglages et vérifiez-les avec ce même processus. L’emplacement du fichier et la procédure de rechargement dépendent de l’installation et de l’hébergement de PHP.
Trouver la configuration PHP active
PHP peut charger ses réglages depuis php.ini ; le fichier utilisé par PHP en ligne de commande peut différer de celui utilisé par un serveur Web ou PHP-FPM. Vérifiez la configuration du processus PHP qui reçoit le téléversement. Pour PHP en ligne de commande, php --ini indique le fichier de configuration chargé. Pour une requête Web, un script temporaire appelant php_ini_loaded_file() peut identifier le fichier chargé ; supprimez ce script après vérification, car les détails de configuration ne doivent pas rester accessibles publiquement.
php.ini contient généralement les réglages d’une installation ou d’un environnement d’exécution PHP. Certaines configurations de serveur Web autorisent aussi des remplacements par répertoire via .htaccess, mais cela dépend du serveur et de son intégration avec PHP. PHP ne fournit pas lui-même .htaccess, et un hébergeur peut désactiver ces remplacements. Si vous ne contrôlez pas le fichier ou le service concerné, utilisez le panneau de contrôle de l’hébergement ou demandez à l’administrateur quels réglages peuvent être modifiés.
Définir upload_max_filesize
Cette directive limite la taille de chaque fichier téléversé. Modifiez la configuration active et choisissez une valeur adaptée au plus gros fichier que vous souhaitez accepter. Par exemple, upload_max_filesize = 32M définit une limite de 32 mégaoctets par fichier. Les valeurs de taille PHP utilisent couramment K, M ou G ; choisissez une valeur prise en charge par votre configuration PHP et votre hébergeur. Ne supposez pas que la valeur d’exemple est la valeur par défaut actuelle ni que sa modification s’applique à tous les environnements PHP du serveur.
Définir post_max_size pour la requête entière
post_max_size limite le corps entier de la requête HTTP, y compris les données du formulaire multipart et tous les autres fichiers de la requête. Réglez cette limite au-dessus de upload_max_filesize, en prévoyant une marge pour les champs du formulaire et les données multipart. Par exemple, pour une limite de 32 mégaoctets par fichier, une limite de requête de 40M laisse une certaine marge. Si la limite de requête est trop basse, PHP peut ne pas mettre le fichier téléversé à la disposition de l’application, même si sa taille est inférieure à upload_max_filesize. memory_limit n’est pas une limite supérieure obligatoire pour ces deux réglages ; les besoins en mémoire dépendent de ce que l’application fait avec le fichier téléversé.
Appliquer les modifications
Enregistrez le fichier de configuration ou le remplacement qui s’applique au processus PHP recevant les téléversements. Selon l’hébergeur, les modifications peuvent prendre effet immédiatement ou nécessiter le rechargement ou le redémarrage du serveur Web, de PHP-FPM ou d’un autre service PHP. Suivez la procédure de votre environnement d’hébergement ; il est inutile de redémarrer PHP en ligne de commande pour une nouvelle commande, tandis qu’un service de longue durée peut nécessiter un rechargement. Sur un hébergement mutualisé, vous devrez peut-être modifier les valeurs dans le panneau de contrôle plutôt que dans un fichier serveur.
Vérifier les limites effectives
Vérifiez les deux valeurs dans le même environnement que celui qui traite les téléversements. Un court script PHP peut afficher les valeurs visibles par ce processus :
Cet exemple est autonome, mais son exécution n’a pas été vérifiée dans le présent paquet. Les noms des directives affichés par l’exemple restent en anglais.
<?php
foreach (['upload_max_filesize', 'post_max_size'] as $name) {
echo $name, '=', ini_get($name), PHP_EOL;
}
Exécutez le script dans l’environnement Web concerné pour examiner les réglages Web ; lancé dans un terminal, il vérifie plutôt PHP en ligne de commande. Supprimez toute page de diagnostic temporaire une fois la vérification terminée. Si les valeurs affichées n’ont pas changé, vérifiez que vous avez modifié le fichier chargé et appliqué les changements au bon service.
Résoudre les problèmes de téléversement persistants
Si un téléversement est refusé, comparez la taille du fichier à upload_max_filesize et la taille totale de la requête à post_max_size. Un message tel que « The uploaded file exceeds the upload_max_filesize directive in php.ini » indique que la limite PHP par fichier est peut-être en cause, même si le texte du message peut varier. Si la limite affichée reste basse, vérifiez le fichier chargé et si le service concerné a été rechargé. Si PHP indique les valeurs attendues, une autre couche peut imposer une limite plus basse, par exemple un serveur Web, un proxy, la plateforme d’hébergement ou une règle de l’application. Vérifiez les réglages et les journaux de cette couche, et demandez conseil à l’hébergeur si ses limites ne sont pas configurables. Gardez la limite de requête au-dessus de la limite par fichier et refaites un essai avec la même route et le même environnement PHP que ceux qui servent les téléversements réels.