Comment modifier la taille maximale des fichiers téléchargés en PHP : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi PHP ne permet-il pas de télécharger un fichier de plus de 2 Mo ?

\n

Avez-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.

\n

Dans 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.

\n\n

Comment PHP limite-t-il le téléchargement de fichiers ?

\n

Lorsque 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\n

1. upload_max_filesize – la limite directe par fichier

\n

C'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 :

\n
upload_max_filesize = 100M
\n\n

2. post_max_size – la taille de l'ensemble de la requête POST

\n

C'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.

\n

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 :

\n
post_max_size = 120M
\n\n

3. max_execution_time – le temps de téléchargement

\n

Les 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 :

\n
max_execution_time = 600
\n\n

4. memory_limit – la mémoire pour le traitement

\n

Certains 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 :

\n
memory_limit = 256M
\n\n

Où et comment modifier les paramètres ?

\n

Maintenant 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\n

Méthode 1 : php.ini (fichier de configuration principal)

\n

C'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 :

\n
; 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
\n

Après les modifications, redémarrez impérativement le serveur web :

\n
sudo service apache2 restart   # pour Apache\nsudo service nginx restart     # pour Nginx
\n\n

Méthode 2 : .htaccess (uniquement pour Apache)

\n

Si 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 :

\n
php_value upload_max_filesize 100M\nphp_value post_max_size 120M\nphp_value max_execution_time 600\nphp_value memory_limit 256M
\n

Important : cette méthode ne fonctionne que

Blogs

Book Recommendations