le MEMO du WEB développeur
••• Divers •••  Liste des Mémos, astuces et bonnes pratiques

Imposer une taille max aux fichiers uploadés sur le serveur

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é";
        }
 }
?> 

 

publié le 17/09/2013 par Memo Web
Formulairesphp.ini
Commenter le Mémo :

Bug quand répertoire .android est dans un sous répertoire avec caractère accentué
Récupérer dans un tableau, les page d'un site indexées par Google
Connaitre la configuration Python sur son hébergement 1&1
Rediriger index.php à la racine du site avec le fichier .htaccess
Retrouver les coordonnées latitude longitude d'un endroit avec Google Map
Personnaliser la page d'erreur 404
Configurer l'encodage UTF-8 d'une base de données et des fichiers d'un site Internet
Enlever ou imposer les www de l'URL de mon site avec un fichier .htaccess
Tutoriel pour afficher et localiser une adresse sur Google Map
Etapes pour Installer Sencha Touch
Ajoutez vos propres Mémos sur MEMO-WEB

Il suffit de vous créer un compte sur le site

Vous pourrez choisir un thème parmis l'une des catégories proposées par MEMO-WEB.

Rédigez votre Mémo.
Après validation par MEMO-WEB, il sera mis en ligne.
Ajouter vos Mémos