Pourquoi PHP ne permet-il pas de télécharger un fichier de plus de 2 Mo ?
\nAvez-vous déjà essayé de télécharger sur un site une photo de bonne qualité, une présentation ou une vidéo, et PHP vous a répondu sèchement : « The uploaded file exceeds the upload_max_filesize directive in php.ini » ? Cela vous dit quelque chose ? C'est un problème classique que l'on rencontre sur un projet sur deux. Sur Stack Overflow, la question « Change the maximum upload file size » a recueilli des dizaines de milliers de vues – et ce n'est pas un hasard.
\nDans cet article, nous allons voir comment fonctionne la limitation du téléchargement de fichiers en PHP, où elle se configure et comment augmenter correctement la limite. Vous découvrirez non seulement upload_max_filesize, mais aussi les pièges qui peuvent réduire tous vos efforts à néant.
Comment PHP limite-t-il le téléchargement de fichiers ?
\nLorsque vous envoyez un fichier via un formulaire, PHP vérifie sa taille à plusieurs niveaux. Si au moins l'un d'eux ne le laisse pas passer, le fichier ne sera pas téléchargé. Examinons les trois principaux paramètres à modifier pour que change the maximum upload file size fonctionne correctement.
\n\n1. upload_max_filesize – la limite directe par fichier
\nC'est le paramètre le plus évident. Il définit la taille maximale d'un seul fichier téléchargé. Par défaut, PHP est réglé sur 2M (2 mégaoctets). Pour l'augmenter, par exemple à 100 Mo, il faut écrire :
upload_max_filesize = 100M\n\n2. post_max_size – la taille de l'ensemble de la requête POST
\nC'est là que beaucoup se font piéger. Même si vous avez augmenté upload_max_filesize, mais oublié post_max_size, le téléchargement ne fonctionnera toujours pas. Pourquoi ? Parce que le fichier est transmis à l'intérieur d'une requête POST, et si la taille de la requête entière dépasse la limite, PHP la tronque simplement.
La règle est simple : post_max_size doit être supérieur à upload_max_filesize. On le règle généralement 20 à 30 % plus grand. Exemple :
post_max_size = 120M\n\n3. max_execution_time – le temps de téléchargement
\nLes fichiers volumineux ne se téléchargent pas instantanément. Si le fichier pèse 100 Mo et qu'Internet est lent, le script peut tout simplement ne pas tenir dans le temps imparti. Par défaut, max_execution_time = 30 secondes. Pour les gros fichiers, augmentez-le à 300-600 secondes :
max_execution_time = 600\n\n4. memory_limit – la mémoire pour le traitement
\nCertains scripts PHP chargent le fichier en mémoire avant de le traiter. Si memory_limit est inférieur à la taille du fichier, vous obtiendrez une erreur. Il est recommandé de le définir plus grand que post_max_size :
memory_limit = 256M\n\nOù et comment modifier les paramètres ?
\nMaintenant que nous savons quels paramètres sont responsables de change the maximum upload file size, voyons où les modifier. Vous avez trois options principales :
\n\nMéthode 1 : php.ini (fichier de configuration principal)
\nC'est la méthode la plus fiable. Trouvez le fichier php.ini sur le serveur (il se trouve généralement dans /etc/php/ ou /usr/local/etc/). Ouvrez-le et recherchez les directives nécessaires. Si elles ne sont pas présentes, ajoutez-les à la fin du fichier :
; Autoriser le téléchargement de fichiers (doit être On)\nfile_uploads = On\n\n; Taille maximale d'un seul fichier\nupload_max_filesize = 100M\n\n; Taille maximale de la requête POST\npost_max_size = 120M\n\n; Temps d'exécution du script\nmax_execution_time = 600\n\n; Limite de mémoire\nmemory_limit = 256M\nAprès les modifications, redémarrez impérativement le serveur web :
\nsudo service apache2 restart # pour Apache\nsudo service nginx restart # pour Nginx\n\nMéthode 2 : .htaccess (uniquement pour Apache)
\nSi vous n'avez pas accès à php.ini (par exemple sur un hébergement mutualisé), vous pouvez essayer via le fichier .htaccess à la racine du site :
php_value upload_max_filesize 100M\nphp_value post_max_size 120M\nphp_value max_execution_time 600\nphp_value memory_limit 256M\nImportant : cette méthode ne fonctionne que