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 :

Uncaught TypeError: Cannot read property 'msie' of undefined
Vérifier la hierarchie de ses balises de titre h1, h2, h3 ... pour le référencement
Tutoriel pour afficher et localiser une adresse sur Google Map
Configurer l'encodage UTF-8 d'une base de données et des fichiers d'un site Internet
Afficher une carte Google Map sur son site Internet avec PHP / Javascript
Etapes pour Installer Sencha Touch
Rediriger index.php à la racine du site avec le fichier .htaccess
Bug quand répertoire .android est dans un sous répertoire avec caractère accentué
Disfonctionnement de WAMP à l'ouverture d'une page php
Script pour jongler avec les octets - Convertir octet / ko / Mo / Go
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