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 :

Vérifier l'extension avant l'upload


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Par défaut
    Bonjour,

    J'ai trouvé un script pour faire un upload d'image je veux dire qu'il fonctionne très bien il contient une seule page il n'accepte que les extensions qu'on lui a indiqué mais le petit souci c'est quand on change l'extension d'un fichier en jpg ou jpeg,png,gif il l'accepte, voici mon code vous pouvez le copier en créant un seul dossier images.

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    <html>
    <head>
    <title>UPLOAD</title>
    </head>
    
    <body>
    <?php
    //define a maxim size for the uploaded images in Kb
     define ("MAX_SIZE","2000"); 
    
    //This function reads the extension of the file. It is used to determine if the file  is an image by checking the extension.
     function getExtension($str) {
             $i = strrpos($str,".");
             if (!$i) { return ""; }
             $l = strlen($str) - $i;
             $ext = substr($str,$i+1,$l);
             return $ext;
     }
    
    //This variable is used as a flag. The value is initialized with 0 (meaning no error  found)  
    //and it will be changed to 1 if an errro occures.  
    //If the error occures the file will not be uploaded.
     $errors=0;
    //checks if the form has been submitted
     if(isset($_POST['Submit'])) 
     {
     	//reads the name of the file the user submitted for uploading
     	$image=$_FILES['image']['name'];
     	//if it is not empty
     	if ($image) 
     	{
     	//get the original name of the file from the clients machine
     		$filename = stripslashes($_FILES['image']['name']);
     	//get the extension of the file in a lower case format
      		$extension = getExtension($filename);
     		$extension = strtolower($extension);
     	//if it is not a known extension, we will suppose it is an error and will not  upload the file,  
    	//otherwise we will do more tests
     if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) 
     		{
    		//print error message
     			echo '<h1>Unknown extension!</h1>';
     			$errors=1;
     		}
     		else
     		{
    //get the size of the image in bytes
     //$_FILES['image']['tmp_name'] is the temporary filename of the file
     //in which the uploaded file was stored on the server
     $size=filesize($_FILES['image']['tmp_name']);
    
    //compare the size with the maxim size we defined and print error if bigger
    if ($size > MAX_SIZE*1024)
    {
    	echo '<h1>You have exceeded the size limit!</h1>';
    	$errors=1;
    }
    
    //we will give an unique name, for example the time in unix time format
    $image_name=time().'.'.$extension;
    //the new name will be containing the full path where will be stored (images folder)
    $newname="images/".$image_name;
    //we verify if the image has been uploaded, and print error instead
    $copied = copy($_FILES['image']['tmp_name'], $newname);
    if (!$copied) 
    {
    	echo '<h1>Copy unsuccessfull!</h1>';
    	$errors=1;
    }}}}
    
    //If no errors registred, print the success message
     if(isset($_POST['Submit']) && !$errors) 
     {
     	echo "<h1>File Uploaded Successfully! Try again!</h1>";
     }
    
     ?>
    
     <form name="newad" method="post" enctype="multipart/form-data"  action="">
     <table>
     	<tr><td><input type="file" name="image"></td></tr>
     	<tr><td><input name="Submit" type="submit" value="Upload image"></td></tr>
     </table>	
     </form>
    </body>
    </html>
    Comment faire pour corriger ce problème?
    merci

    Si vous avez un autre script je suis preneur !

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bonjour

    Je ne comprends pas bien ton problème. Ton script teste si le fichier que tu upload porte bien une des extensions autorisées. C'est ce que tu veux faire, non ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Par défaut
    Bonjour,

    quand on change l'extension d'un fichier en jpg ou jpeg,png,gif il l'accepte
    En effet ton script ne testes que l'extension du fichier, et non pas le type de fichier. C'est donc normal que ce dernier soit accepté.

    Si tu cherches à vérifier aussi le type tu peux faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $type = mime_content_type($filename);
    $allowed_mime_types = array('image/gif','image/jpeg','image/png');
    if(in_array($type, $allowed_mime_types){
        echo 'FICHIER OK';
    }

  4. #4
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 15
    Par défaut
    oui voila le script ne teste que l'extension, merci de votre aide, mais pouvez-vous me dire encore ou dois je modifier dans le script je trouve ça compliqué

Discussions similaires

  1. Vérifier les dimensions d'une image avant d'uploader
    Par aliwassem dans le forum Langage
    Réponses: 6
    Dernier message: 31/05/2008, 12h30
  2. Vérifier un enregistrement avant d'en inserer un autre
    Par morgan47 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 06/07/2006, 23h51
  3. Réponses: 7
    Dernier message: 26/03/2006, 16h46
  4. [Formulaire] vérifier les champs avant enregistrement
    Par julien_t_m dans le forum Access
    Réponses: 5
    Dernier message: 16/10/2005, 20h53
  5. tester l'extension d'un fichier avant d'uploader
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/02/2005, 15h12

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