Configuration du serveur : Limiter la taille des fichiers chargés sur le serveur avec le fichier php.ini

Le chargement des fichiers sur un serveur, et en particulier la taille des fichiers uploadés, est soumis à plusieurs limitations au niveau de la configuration dudit serveur. 

Ces paramètres limitatifs sont modifiables dans le fichier php.ini et peuvent être vérifiés avec la commande phpinfo() qui affiche tous les paramètres du serveur.

<?php
  phpinfo();
?>

Les paramètres pris en compte pour maîtriser l'upload des fichiers sont les suivants :

upload_max_filesize : Fixe la taille maximale d'un fichier à charger (exprimée en octets).

post_max_size : Fixe le poids maximum des données envoyées  par le formulaire (donc des fichiers chargés par formulaire sur le serveur). La valeur de post_max_size doit logiquement être  supérieure ou égale à la valeur de upload_max_filesize

Vérifiez aussi la valeur du paramètre memory_limit qui fixe la mémoire maximum qu'un script peut allouer à une requête. La valeur de memory_limit  doit être supérieure ou égale à la valeur de post_max_size.

 Limiter la taille du fichier à uploader au niveau du formulaire HTML

Ci dessous, un exemple de formulaire d'upload de fichiers et traitement des données.

Il est possible de limiter, côté client, la taille des fichiers uploadés, tout en gardant à l'esprit que la taille max fixée côté client ne peut pas être supérieure à celle fixée par le serveur. 

Pour fixer une taille limite sur le fichier à télécharger par le formulaire il faut ajouter un champs de type hidden  et de name MAX_FILE_SIZE (avant la déclaration de l'input file), dont la valeur est la taille limite qu'on veut donner au fichier téléchargé (l'unité est l'octet).

Attention : La valeur de MAX_FILE_SIZE  peut être facilement modifiée par un utilisateur facétieux qui sait utiliser click droit>Inspécter l'élément, nous ne pouvons donc pas nous fier à 100% à cette limite ! 

Code HTML :

<form action="upload.php" method="post" name="import_fichier" enctype="multipart/form-data"/>
    <label> Charger un fichier (tous formats) : </label><br />
    <input type="hidden" name="MAX_FILE_SIZE" value="104857600" /> <!-- Limite 100Mo -->
    <input type="file" name="mon_fichier" id="mon_fichier" /><br />  
    <input type="submit" value="Charger un fichier" /><br/> 
 </form>

Limiter la taille du fichier uploadé en sortie de formulaire (partie PHP) 

Nous attaquons ici le traitement des paramètres envoyés par le formulaire de téléchargement de fichiers.

Comme indiqué ci dessus, la vérification HTML n'étant pas suffisante, nous allons refaire un contrôle sur la taille du fichier que l'utlisateur a téléchargé en utilisant la fonction filesize qui calcule la taille d'un fichier.

Code PHP (fichier upload.php) :

<?php
    $repertoireDestination = "uploads/"   ;   
    $NomDuFichier = $_FILES["mon_fichier"]["name"];
    $taille_max    = 104857600;
    $taille_fichier = filesize($_FILES['mon_fichier']['tmp_name']);
    if ($taille_fichier > $taille_max){
      echo "Vous avez dépassé la taille de fichier autorisée";
    }else if ($NomDuFichier !=''){
        if ( is_uploaded_file($_FILES["mon_fichier"]["tmp_name"])) {
          if (file_exists ($repertoireDestination.$NomDuFichier)){
            echo 'Le fichier '.$NomDuFichier.' existe déjà<br/>';
          }else{ 
            if (!rename($_FILES["mon_fichier"]["tmp_name"],
                $repertoireDestination.$NomDuFichier))
            {   
              echo "Le déplacement du fichier temporaire a échoué";
            }
          }    
        } else {
          echo "Le fichier ". $NomDuFichier ." n'a pas été uploadé";
        }
 }
?> 

 

0 réponses

Laisser un commentaire

Participez-vous à la discussion?
N'hésitez pas à contribuer!

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.