Afficher une alerte

t671 -  
 t671 -
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. arthezius Messages postés 3756 Statut Membre 475
     
    $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
  2. t671
     
    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. arthezius Messages postés 3756 Statut Membre 475
       
      Tu peux faire un test avec:
      echo $size;

      Tu pourras ainsi afficher et contrôler la taille du fichier.
      0
  3. t671
     
    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. arthezius Messages postés 3756 Statut Membre 475
       
      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
  4. t671
     
    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. arthezius Messages postés 3756 Statut Membre 475
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. t671
     
    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