mon blog de geek...

Comment uploader un fichier de plus de 2 Mo ?

Dernièrement j’ai eu à aider un client qui voulait restaurer une sauvegarde sql. Le fichier faisait plusieurs dizaines de Mo et  phpMyAdmin ne pouvait pas l’ouvrir. Le problème était du à deux limites : fichier trop gros et temps d’exécution trop long.

Dans une configuration standard on ne peut pas envoyer un gros fichier sur le serveur. Cela est du à une limite de php fixée par défaut à 2 Mo. Souvent pour des raisons de sécurité : empêcher le chargements de fichiers monstrueux par des utilisateurs maladroits, voire animés d’intentions malveillantes. L’envoi de très gros fichiers peut saturer l’espace disque mais surtout occupe le serveur pendant de longues minutes.
Si on est le seul en mesure d’uploader des fichiers, on suppose qu’on sait ce qu’on fait et on peut s’affranchir de cette limite.

La bonne nouvelle c’est que ça peut se paramétrer, c’est tout l’intérêt d’utiliser un serveur dédié : on est maitre chez soi !

Il y a plusieurs façons de le faire : soit pour un seul site, soit globalement. Mais d’abord, il faut connaître les limites actuelles.

Connaitre les paramètres actuels de php

On peut vérifier les limites de php (et bien d’autres choses) grâce à la commande phpinfo(). Il suffit d’ajouter un fichier php sur votre hébergement avec les lignes suivantes :

phpinfoLa page vous affichera une quantité importante d’informations dont la version de php utilisée (php5 chez moi, le passage à php7 est planifié), le serveur utilisé (apache ou nginx), l’emplacement des fichiers de configuration…

Une sélection des lignes intéressantes avec la valeur affichée sur un de mes serveurs :

  1. Loaded Configuration File :/etc/php5/apache2/php.ini (ou /etc/php5/fpm/php.ini sur un autre)
  2. upload_max_filesize : 2 M
  3. post_max_size : 8 M
  4. max_execution_time : 30
  5. max_input_time : 60
  6. memory_limit : 128 M

en 1 on trouve l’emplacement du fichier php.ini (qu’on modifiera plus loin), ensuite la taille limite des fichiers uploadés et des données envoyées par un formulaire. C’est indiqué en M (Mo) ou G (Go)

En 4 et 5 ce sont les durées (en seconde) d’exécution maximum des scripts. et en dernier la mémoire maximum utilisée.

Modifier la limite d’upload pour un site

Comme souvent, il faut modifier (ou créer) le fichier .htaccess présent dans le dossier de votre site. Il peut être à la racine pour agir sur l’ensemble du site, ou dans un dossier spécifique, auquel cas il n’influera que sur les scripts du dossier.

Pour les besoins du test, j’ai créé un dossier dans lequel j’ai créé le fichier .htaccess ci dessous. J’y ai également copié mon fichier php destiné à afficher phpinfo()

Chacune des valeurs a son utilité : post_max_size est la taille maxi d’un post de formulaire. L’un ne va pas sans l’autre. Les deux autres valeurs modifient la durée limite d’exécution de vos scripts. Ici 600 secondes (10 minutes) et doubler la mémoire utilisable (de 128 à 256Mo) devraient suffire.

Le fichier .htaccess est pris en compte immédiatement, sans avoir besoin de relancer le serveur. L’intérêt est de pouvoir agir précisément sur les seuls scripts d’un dossier.

Personnellement pour des raisons d’optimisation je n’utilise pas les fichiers htaccess, je préfère indiquer mes paramétrages directement dans le fichier de configuration d’apache. J’aurai l’occasion d’y revenir ultérieurement…

Modifier php.ini

On a vu plus haut grâce à phpinfo() où trouver le fichier php.ini, il suffit donc de l’éditer (on suppose que vous avez les droits root, sinon faites précéder chaque commande par sudo):

et de chercher les valeurs à modifier : max_execution_time, max_input_time, memory_limit, post_max_size et upload_max_filesize. Dans nano utilisez ctrl W pour chercher un texte.

N’oubliez pas de redémarrer Apache :

et vérifiez dans votre script phpinfo si c’est bien pris en compte.

N’oubliez pas de supprimer votre fichier phpinfo quand vous n’en n’avez plus l’usage. Surtout si vous lui avez donné ce nom bien particulier : inutile de le laisser à la vue d’éventuels pirates qui pourraient en tirer des informations.

 

 

0 Commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *