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 :

Amélioration script Upload image


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Points : 33
    Points
    33
    Par défaut Amélioration script Upload image
    Bonjour,

    J'ai un script qui upload tous type de fichier,
    Je souhaiterai le border et autoriser que l'upload de jpg ou png

    je penser réutiliser cette fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $extension_upload = strtolower( substr(strrchr($_FILES['image']['name'], '.') ,1) );
    if ( in_array($extension_upload,$extensions_valides) ) echo "Extension correcte";
    mais je ne vois pas comment la mettre en évidence dans mon script.
    je déclare un array avec les extensions autorisé.
    Puis je suppose que je doit mettre une condition qui contrôle l'extension du fichier.

    Voici mon script :
    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
    <html>
    <head>ll</head>
    <?php
    if(isset($_POST['upload_img'])){
    	$file_name = $_FILES['image']['name'];
    	$file_type = $_FILES['image']['type'];
    	$file_size = $_FILES['image']['size'];
    	$file_error = $_FILES['image']['error'];
    	$file_tmp_name = $_FILES['image']['tmp_name'];
     
    	if($file_name){
    	 move_uploaded_file($file_tmp_name,"img/$file_name");
    	}
    }
    ?>
    <body>
    <form method="post" action="" enctype="multipart/form-data">
    <label>upload</label><br />
    <input type="file" name="image"><br /><br />
    <input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
    <input type="submit" value="Upload Image" name="upload_img">
    </form>
     
    <?php
    $folder = "img";
    if(is_dir($folder)){	
    		if($handle = opendir($folder)){	
     
    			while(($file=readdir($handle)) != false){			
    				if($file==='.' || $file==='..'  )continue;
     
    				echo '<img src="img/'.$file.'" width="150" height="150" alt="">';
    			}
    			closedir($handle);			
    		}			
    }
    ?>
    merci de 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 existe des fonctions pour avoir l'extension :

    http://php.net/manual/fr/splfileinfo.getextension.php
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ou plus basiquement pathinfo avec le flag PATHINFO_EXTENSION

    A part ça, tu as tout à fait compris le principe : contrôler et si le contrôle échoue, rejeter l'upload. Quel est ton problème exactement ?
    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]

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    voir cet exemple :

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Points : 33
    Points
    33
    Par défaut
    Actuellement avec le script je peux uploader tous type de fichiers.
    Je souhaiterai que pour l'upload il n'y a que les extension jpg et png.

    Donc faudrait que j'utilise PATHINFO_EXTENSION

    mais je dois la placer dans une condition avant d’exécuter l'upload

  6. #6
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Oui c'est bien ça. Tu as l'air d'avoir bien compris ce qu'il faut faire. Quel est le problème exactement ?
    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]

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Points : 33
    Points
    33
    Par défaut
    Déja avant tous merci pour votre aide.

    j'ai donc regardé comment utiliser pathinfo_extension

    j'ai essayé cela
    crée une variable extension_valides compenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $extensions_valides = array( 'jpg' , 'jpeg' ,'png' );
    Puis j'ai crée une variable file_extension
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $file_Extension = strtolower(pathinfo($_FILES['image']['name'],PATHINFO_EXTENSION));
    J'ai crée un if($a === $b) puis englobé l'a suite de la requete mais cela ne passe pas.

    voici le 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
    <?php
    $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
    $file_Extension = strtolower(pathinfo($_FILES['image']['name'],PATHINFO_EXTENSION));
     
    $folder = "img";
     
    if ($file_Extension === $file_Extension){
    	if(is_dir($folder)){	
    			if($handle = opendir($folder)){	
     
    				while(($file=readdir($handle)) != false){			
    					if($file==='.' || $file==='..'  )continue;
     
    					echo '<img src="img/'.$file.'" width="150" height="150" alt="">';
    				}
    				closedir($handle);			
    			}			
    	}
    }
    ?>
    j'obtiens l'erreur :Notice: Undefined index: image in C:\wamp64\www\uploadtest\formulaire.php on line 26

  8. #8
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($file_Extension === $file_Extension){
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($file_Extension === $file_Extension){
    j'avoue crackage lol

    sinon je voulais mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($file_Extension === $extensions_valides){
    mais toujours une erreur a la ligne 26
    soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $file_Extension = strtolower(pathinfo($_FILES['image']['name'],PATHINFO_EXTENSION));

  10. #10
    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 : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($file_Extension === $extensions_valides){
    Bof. Vu que $extensions_valides est un tableau, j'utiliserai plutôt in_array :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (in_array($file_Extension, $extensions_valides)){
    Et sinon, pour ton erreur, ce serait sans doute une bonne idée de ne faire le test que si un fichier a été envoyé
    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]

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Février 2014
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2014
    Messages : 145
    Points : 33
    Points
    33
    Par défaut
    Quand tu veut dire faire le test que si un fichier est envoyé, donc faut que je test la différence soit $a != $b ?
    voici le code testé
    tant que $extensions_valides est different de $file_extension afficher erreur ....
    est ce le bon procedé ?

    car il me renvoie toujours une erreur Undefined index sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $file_Extension = strtolower(pathinfo($_FILES['image']['name'],PATHINFO_EXTENSION));
    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
     
    <?php
    $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
    $file_Extension = strtolower(pathinfo($_FILES['image']['name'],PATHINFO_EXTENSION));
     
    $folder = "img";
     
     
    	if(is_dir($folder)){	
    			if($handle = opendir($folder)){	
     
    				while ($extensions_valides != $file_Extension){
    					echo 'le fichier uploader n est pas une image';
     
    				while(($file=readdir($handle)) != false){			
    					if($file==='.' || $file==='..'  )continue;
     
    					echo '<img src="img/'.$file.'" width="150" height="150" alt="">';
    				}
    				closedir($handle);			
    			}			
    	}
    	}
    ?>
    J'ai également essayé ta suggestion.
    Comme tu me la évoquer les valeurs appartient a un table dons j'ai utilisé le in_array
    Quand il verifie les erreur si le fichier porte la bonne extension alors on ouvre le dossier et on upload
    sinon on affiche une erreur.

    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
     
    <html>
    <head>ll</head>
    <?php
    if(isset($_POST['upload_img'])){
    	$file_name = $_FILES['image']['name'];
    	$file_type = $_FILES['image']['type'];
    	$file_size = $_FILES['image']['size'];
    	$file_error = $_FILES['image']['error'];
    	$file_tmp_name = $_FILES['image']['tmp_name'];
     
    	if($file_name){
    	 move_uploaded_file($file_tmp_name,"img/$file_name");
    	}
    }
    ?>
    <body>
    <form method="post" action="" enctype="multipart/form-data">
    <label>upload</label><br />
    <input type="file" name="image"><br /><br />
    <input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
    <input type="submit" value="Upload Image" name="upload_img">
    </form>
     
    <?php
    $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
    $file_Extension = strtolower(pathinfo($_FILES['image']['name'],PATHINFO_EXTENSION));
     
     
     
    $folder = "img";
     
     if (in_array($file_Extension, $extensions_valides)){
    	if(is_dir($folder)){	
    			if($handle = opendir($folder)){	
     
     
    				while(($file=readdir($handle)) != false){			
    					if($file==='.' || $file==='..'  )continue;
     
    					echo '<img src="img/'.$file.'" width="150" height="150" alt="">';
    				}
    				closedir($handle);			
    			}			
    	}
     }
     else
    	 echo "le fichier n'est pas une photo"; 
    ?>
    Mais toujours l'erreur sur index image ( ma variable image n'est pas définie )

  12. #12
    Invité
    Invité(e)
    Par défaut
    bonjour,

    1/ c'est bien de les réponses....
    Encore faut-il comprendre les corrections données :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if (in_array($file_Extension, $extensions_valides)){
    Quand on ne comprend pas, on fait une recherche : in_array()

    2/ Quant au message d'erreur...
    Merci de nous le MONTRER (complet), car il fourni des infos utlises à sa résolution

    3/ Et explique-nous POURQUOI le test d'extension ne se fait pas à la récupération des données (dans ton 1er script PHP), AVANT d'uploader le fichier...
    Ton code a clairement un problème de LOGIQUE, et d'enchainement des évènements.
    (qui explique aussi l'erreur "image" non définie...)

    Toi, tu vérifies l'extension APRES avoir uploadé le fichier (et ce, uniquement au moment d'AFFICHER le fichier).
    Non : il faut le faire AVANT, lors du traitement (inutile de télécharger des fichiers non-valides !)

    N.B. Je t'avais mis un lien, avec exemple de traitement et gestion d'erreur.
    As-tu au moins pris le temps de le LIRE ??

    Ca peut te permettre de comprendre l'enchainement des actions.
    Dernière modification par Invité ; 08/07/2016 à 10h17.

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    bonjour,
    1/ c'est bien de les réponses....
    Encore faut-il comprendre les corrections données
    C'est moi qui a plussoyé le dernier message de Celira afin qu'il soit bien pris en compte par micus...
    En fait cela reprend le premier bout de code qu'il avait mis dans son premier message, mais qu'il n'a pas su exploiter.

    Pour chipoter à mon avis tu ne devrais pas parler de contrôler l'extension en php avant d'avoir uploadé le fichier, car il faut bien que le fichier soit uploadé (certes dans le répertoire temporaire) pour pouvoir y accéder en php donc cela peut prêter à confusion.

    Je précise donc pour micus :
    On fait le contrôle en php après que le fichier soit uploadé dans le répertoire temporaire mais avant qu'il soit transféré dans son emplacement définitif avec move_uploaded_file. Etant donné que les fichiers temporaires sont effacés automatiquement en fin de script, il n'en restera aucune trace si on ne les exploite pas avec move_uploaded_file ou une autre fonction php de transfère ou de copie de fichier.

    Si tu veux un script qui puisse afficher la vignette de l'image dès la sélection du fichier et refuser le téléchargement avant l'upload du fichier en cas d'extension non conforme, il faut utiliser javascript couplé à php. Cela permet aussi d'afficher la progression du téléchargement et de multiples possibilités comme le recadrage/crop avant upload, etc. Tu peux regarder ici pour un module complet avec des exemples prêts à l'emploi. L'avantage pour l'utilisateur est qu'il n'aura pas à attendre le téléchargement complet du fichier avant d'avoir les informations.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    ...tu ne devrais pas parler de contrôler l'extension en php avant d'avoir uploadé le fichier, car il faut bien que le fichier soit uploadé (certes dans le répertoire temporaire) pour pouvoir y accéder en php donc cela peut prêter à confusion...
    C'est très juste.

    Il fallait donc comprendre : "AVANT le move_uploaded_file()"

    @ABCIWEB : Et je plusse ou plussois () ton "module complet"
    (que je n'ai toujours pas eu pris le temps de tester... mais que je reprendrais* certainement pour mes prochains développements de sites)
    * un bon exemple de collaboration "croisée" entre membres DVP !
    Dernière modification par Invité ; 08/07/2016 à 19h57.

  15. #15
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    C'est très juste.
    @ABCIWEB : Et je plusse ou plussois () ton "module complet"
    (que je n'ai toujours pas eu pris le temps de tester... mais que je reprendrais* certainement pour mes prochains développements de sites)
    * un bon exemple de collaboration "croisée" entre membres DVP !
    Oui et d'ailleurs tu retrouveras certaines de tes fonctions de redimensionnement et crop dans ce module. Je les ai modifiées pour les besoins internes mais j'ai laissé les liens vers ton article dans le code source de ces fichiers

    C'est le moment idéal pour s'y intéresser d'autant plus que je viens de poster à l'instant la version 6.0 avec des exemples compatibles pour navigateurs obsolètes >= IE7. Il n'y a donc plus d'inconvénient à l'utiliser en "tout terrain" et les visiteurs ayant des navigateurs modernes profiteront de toutes les fonctionnalités avancées



    (j'ai testé le mode compatibilité IE7 depuis IE10. Il est très probable que les exemples soient compatibles également IE6 mais j'ai pas de moyens pour tester)

Discussions similaires

  1. Recherche script upload images + redimension + descriptif
    Par azaroth dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 06/06/2014, 13h11
  2. [Encodage] Script upload image
    Par Joretapo17 dans le forum Langage
    Réponses: 4
    Dernier message: 25/04/2012, 02h02
  3. [AJAX] Script upload images
    Par dzaohfz dans le forum AJAX
    Réponses: 0
    Dernier message: 15/02/2012, 16h37
  4. Script Upload Images?
    Par jojo86 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 05/07/2011, 18h30
  5. [Upload] Script upload images
    Par Myriamrv dans le forum Langage
    Réponses: 14
    Dernier message: 07/12/2005, 18h24

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