IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

probleme avec is_uploaded_file [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Points : 122
    Points
    122
    Par défaut probleme avec is_uploaded_file
    Bonjour,

    j'ai un petit souci quand j'essai d'uploader un fichier(mp3) en local sur wamp :
    Configuration Serveur
    Version de Apache:
    2.2.8
    Version de PHP:
    5.2.6

    le souci c'est par exemple j'ai fixé dans mon php.ini les valeurs suivant
    upload_max_filesize = 7M
    post_max_size = 7M
    memory_limit = 1024M

    et quand j'essai d'uploader un fichier de 10mo il y a une condition qui n'est jamais vérifié dans mon méthode et aussi le script ne fait rien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if($files['fichier']['size'] < $this->maxSize())
    voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
     public function doUpload($files,$repertoire) {
     
    			if($files['fichier']['error']!=UPLOAD_ERR_NO_FILE)
    			{
    				$tmp_name=$files['fichier']['tmp_name'];
    				if(is_uploaded_file($tmp_name))
    				{
    					$type_file = $files['fichier']['type'];
    					$allowed_types = array("audio/mpeg","application/octet-stream");	
    					if(in_array($type_file,$allowed_types))
    					{
    							if($files['fichier']['size'] < $this->maxSize())
    							{
    								$this->namefile = $files['fichier']['name'];
    								if(file_exists($repertoire) and !file_exists($repertoire.$this->namefile)) 
    								{
    									if(move_uploaded_file($tmp_name, $repertoire.$this->namefile))
    									{
    											echo " <strong>".$this->getName(). "</strong> is uploaded";
    									}else{
    											throw new Exception ("impossible to copy file");
    											return false;
    									}
    								}else{
    									throw new Exception ("<strong>".$this->getName()."</strong>  already exist");
    									return false;
    								}	
     
    							}else{
    									throw new Exception ("file size too big");
    									return false;
    							}			
    					}else{
    							throw new Exception ("type not authorized");
    							return false;
    					}
    				}else{
    					throw new Exception ("no file to upload");
    					return false;
    				}
    			}else{
    				throw new Exception ("file is empty : browse a file");
    				return false;
    			}
     
    		}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if(isset($_POST['playlist']) and $_POST['playlist']!=null) {
    		$destination = 'audiofile/'.$_POST['playlist'].'/';
    		try 
    		{
    					$objetPlaylist->doUpload($_FILES,$destination);
     
    		} catch (Exception $e) {			
    					echo $e->getMessage();
    		}
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <form method="post" action="<?php echo basename(__FILE__); ?>" enctype="multipart/form-data" >
    									<table width="200" style="border:1px solid #dadada;margin:5px;">
    										<tr>
    											 <td colspan = "3"> <strong> UPLOAD NEW SONG PANEL</strong></td>
    										</tr>
    										<tr>
    											<td><label>fichier:</label></td>
    											<td><input type="hidden" name="playlist" value="<?php if(isset($_SESSION['playlist'])) echo $_SESSION['playlist']; ?>" ></input></td>
    											<td><input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $objetPlaylist->maxSize(); ?>" /></td>
    											<td><input type="file" name="fichier" ></input></td>
     
     
    										</tr>
    										<tr>
    											<td></td>
    											<td>&nbsp;</td>
    											<td><input type="submit" value="Envoyer" /></td>
    										</tr>
    									</table>
    								</form>
    si vous avez une idée merci pour votre aide

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    il y a une condition qui n'est jamais vérifié dans mon méthode et aussi le script ne fait rien
    Tu as controlé ce que valait chacune des deux valeurs ?

  3. #3
    Membre régulier Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Points : 122
    Points
    122
    Par défaut
    Oui voici la méthode affichant le maxsize dans le php.ini et affiche bien le mawsize
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public function maxSize() {                       
    			$val = trim(ini_get('upload_max_filesize'));
    			$last = strtolower($val{strlen($val)-1});
    				switch($last)
    				{
    					case 'g':
    							$val *= 1024;
    					case 'm':
    							$val *= 1024;
    					case 'k':
    							$val *= 1024;
    				}
    			$this->maxsize=$val ;
    			return $this->maxsize;
    		}
    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print $files['fichier']['size']
    ça affiche bien la taille du fichier pour ceux qui sont inférieur à la maxsize
    par contre si la taille est supérieur au maxsize le script ne passe pas du tout dans le boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(is_uploaded_file($tmp_name))
    {

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne comprends pas bien ce que tu veux faire ou ce qui te bloque.

    Que souhaites-tu obtenir et qu'as-tu a la place actuellement ?

  5. #5
    Membre régulier Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Points : 122
    Points
    122
    Par défaut
    ce que je souhaite obtenir c'est que cette condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($files['fichier']['size']<$this->maxSize()){
    soit vérifié alors que ce n'est pas le cas si j'essai d'uploader un fichier supérieur au maxsize de mon php.ini.

    Si j'essai d'uploader des fichiers dont la taille est inférieur à maxsize tous se passe bien si je fait le contraire j'arrive pas à lever l'exception

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    throw new Exception ("file size too big");
    return false;
    Une piste en faisant le débugage en affichant print_r($_POST) ou print $this->maxSize(); des variables postées , si j'essai d'uploader le dit fichier : rien ne se passe, je vois que c'est bloqué au niveau du formulaire et là je ne sais pas pourquoi

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Dans ton formulaire tu définis le MAX_FILE_SIZE.
    Si ton fichier le dépasse, ton upload est en erreur UPLOAD_ERR_FORM_SIZE.

  7. #7
    Membre régulier Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Points : 122
    Points
    122
    Par défaut
    donc c'est normal qu'il ne se passe rien ? car je vois pas comment récupérer ce variable dans ma méthode doUpload
    car si j'essai d'ajouter ceci dans ma méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
     switch($_FILES['fichier']['error'])
      {
         case 1: // UPLOAD_ERR_INI_SIZE
            die("Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !");
            break;
          case 2: // UPLOAD_ERR_FORM_SIZE
            die("Le fichier dépasse la limite autorisée dans le formulaire HTML !");
            break;
          case 3: // UPLOAD_ERR_PARTIAL
            die("L'envoi du fichier a été interrompu pendant le transfert !");
            break;
          case 4: // UPLOAD_ERR_NO_FILE
            die("Le fichier que vous avez envoyé a une taille nulle !");
            break;
      }
    mon script ne passera jamais dans doUpload pour que je puisse verifié la taille max du fichier uploader et de lever une exception par exemple.
    Le Méthode de contrôle la taille d’un fichier avant l'envoi ne sera jamais executer car ceci est déjà fait par MAX_FILE_SIZE dans le formulaire ? ou je me trompe ?

  8. #8
    Membre régulier Avatar de stomerfull
    Inscrit en
    Septembre 2005
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 307
    Points : 122
    Points
    122
    Par défaut
    jai trouvé la solution

    la valeur des paramètre dans php.ini du post max size doit etre différente de celle dans MAX_FILE_SIZE du formulaire

    ça a marché maintenant

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo