Afficher une alerte

Bonjour,

J'ai un script d'upload de fichier, et je voudrais mettre une alerte si le fichier à uploader (via formulaire) est supérieur à 2Mo.
Ca fonctionne en local, mais pas on-line (hébergement chez Free).
J'ai testé 2 solutions, mais rien à faire. Le fichier n'est pas uploadé (ce qui est normal), et je n'ai pas le message d'alerte attendu :

$fichier = basename($_FILES['monfichier']['name']); 

if (!empty($fichier)) 
{ 
$size=$_FILES['monfichier']['size'];  
if ((!empty ($fichier)) && ($size == 0)) //-----Là, si $size=0, c'est que le fichier est >2Mo vu que $fichier n'est pas vide, donc il existe 
           {  
             header("Location: saisie_stat_2.php?titre=$titre&soustitre=$soustitre&texte=$texte");   
              exit; 
             } 
$sql1 = "INSERT INTO ..........................


Et le 2° script de testé :

$fichier = basename($_FILES['monfichier']['name']); 

if (!empty($fichier)) 
{ 
$size=$_FILES['monfichier']['size'];  
if ((!empty ($fichier)) && ($size == 0)) //-----Là, si $size=0, c'est que le fichier est >2Mo vu que $fichier n'est pas vide, donc il existe 
           {  
             $erreur = 'Le fichier est trop gros...'; 
             echo $erreur;  
              exit; 
             } 
$sql1 = "INSERT INTO .........................


Pour le premier test, le script saisie_stat_2.php contient un code javascript qui affiche une alerte en pop-pup.

Auriez-vous une solution à me proposer ?
Pourquoi ça ne fonctionne pas online ?

Merci

5 réponses

  1. $size=$_FILES['monfichier']['size'];  
    if ((!empty ($fichier)) && ($size == 0)) //-----Là, si $size=0, c'est que le fichier est >2Mo vu que $fichier n'est pas vide, donc il existe 

    La condition $size==0 vérifie si la $size est égal à 0.
    Si tu veux vérifier que le fichier soit inférieur à 2Mo il faut faire comme suis:
    $size=$_FILES['monfichier']['size'];
    // 1Ko = 1024 octets, 1Mo = 1024Ko
    // 1Mo = 1024 x 1024 = 1048576 octets.
    $size= ($size/1024)/1024; // Poids en Mo.
    if($size>2)
    	{
    	echo'Erreur, fichier trop lourd ('.$size.'). Le poid doit être inférieur à 2Mo.';
    	}
    else{
    	// Upload
    	}
    0
    1. Ben non, ça ne fonctionne pas !
      Si le fichier est >=2, size = 0, mais size n'affe pas 2 ou supérieur !

      J'ai également essayé avec if($size==0), mais je n'ai toujours pas d'alerte ...... :o(
      0
      1. Tu peux faire un test avec:
        echo $size;

        Tu pourras ainsi afficher et contrôler la taille du fichier.
        0
    2. En fait, sur Free, par défaut upload_max_filesize vaut 2Mo dans le php.ini, donc on ne peut outrepasser cette limite. Et si le fichier la dépasse, le script se déroule sans rien faire !

      Mais y a t'il quand même possibilité de tester le poids du fichier si celui-ci dépasse les 2Mo, afin de faire apparaitre une alerte dans ce cas ?

      Si on crée une alerte à partir de 1,8Mo, celle-ci agira jusqu'à 2Mo. Puis elle deviendra inéficace.

      Comment faire ?
      0
      1. Tu as la réponse sur cette page: http://phpcodeur.net/articles/php/upload
        UPLOAD_ERR_INI_SIZE
            Valeur : 1; Le fichier excède le poids autorisé par la directive upload_max_filesize de php.ini 

        Cette valeur est retourné par $_FILES['fichier']['error'], il faut donc contrôler la valeur de cette variable avant de passer à la suite.
        UPLOAD_ERR_OK
            Valeur : 0; Aucune erreur, le fichier a bien été uploadé 
        0
    3. J'ai testé le résultat de "UPLOAD_ERR_INI_SIZE"
      echo UPLOAD_ERR_INI_SIZE;

      (en local et chez Free).

      Avec un fichier >2Mo (2,008Mo) : UPLOAD_ERR_INI_SIZE=1
      Avec un fichier <2Mo (195Ko) : UPLOAD_ERR_INI_SIZE=1 ??????????
      0
      1. Deux choses:
        - Vérifie la valeur du upload_max_filesize avec un phpinfo()
        - Vérifie la valeur du fichier avec $_FILES['monfichier']['size']

        Peux-tu mettre ton script complet pour l'upload?
        0
    4. Le upload_max_filesize est limité à 2Mo chez Free, et la plupart des serveurs. Chez moi il est aussi à 2Mo. Mais chez Free, si le fichier atteint cette valeur, plus rien n'est possible ...... !!!!!!
      Ce qu'il faudrait, c'est tester le poids du fichier avant l'upload !!!!! Mais comment ? J'ai cherché, et apparemment ce n'est pas possible !

      Mon script d'upload avec $_FILES['monfichier']['size'], est dans mon post d'origine.
      Sinon, j'ai essayé avec ($_FILES['monfichier']['error'])
      :
      $texte = $_POST['texte'];
      $monfichier = $_POST['monfichier'];
      
      if($_FILES['monfichier']['error'] <> 0)
        	{    
          switch($_FILES['monfichier']['error'])
          {    
            case 1: echo'<center><h1>Le fichier dépasse la limite autorisée !</h1><p>
                 		   <input type="button" name="lien" value="Retour" onClick="self.location.href=\'javascript:history.back()\'"></center>'; //par le serveur
            		  exit;    
            case 2: echo'<center><h1>Le fichier dépasse la limite autorisée !</h1><p>
                         <input type="button" name="lien" value="Retour" onClick="self.location.href=\'javascript:history.back()\'"></center>'; //par le script
            		  exit;    
            case 3: echo'<center><h1>L\'envoi du fichier a été interrompu pendant le transfert pour une raison inconnu. Réessayer plus tard ..... !</h1><p>
                         <input type="button" name="lien" value="Retour" onClick="self.location.href=\'javascript:history.back()\'"></center>'; 
            		  exit;    
            case 4: //--------pas de fichier à uploader ! --------
                     	  $sql1 = "INSERT INTO .............................
                     break;    
          }    
        	}    
      else
          {    
      			$sql1 = "INSERT INTO..................


      Mais le résultat, c'est pareil. Ca fonctionne en local, mais pas chez Free ......

      Comment tester le poids du fichier avant l'envoie ?
      0