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
A voir également:

5 réponses

arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   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
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
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   475
 
Tu peux faire un test avec:
echo $size;

Tu pourras ainsi afficher et contrôler la taille du fichier.
0
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
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   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
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
arthezius Messages postés 3538 Date d'inscription   Statut Membre Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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