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 :

Creation de dossier script PHP


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Creation de dossier script PHP
    Bonjour tous le monde !
    Je vous expose mon soucis :
    Voila en fait j'aimerais créer un dossier en fonction des nom de mes images.
    Je m'explique : j'ai un dossier Vrac qui comprend des images j'aimerais un script qui va venir créer deux dossier en fonction des nom de mes image .En l'occurence j'ai deux sorte d'image des montagnes et des avions. Donc je voudrais un script qui reconnaisse le nom de mes images pour venir créer un dossier montagne et un dossier avions et les place dans leur dossier respectif . J'espère mettre fais comprendre .

    Merci

    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
    <?php
     
     
     
    class Image
    {
     
        public function getImages($image_dir)
        {
            //Nous ouvrons le dossier $image_dir avec opendir 
            // Et affectons le résultat à la variable $handle 
            if($handle = opendir($image_dir))
            {
               //
                while (false !== ($entry = readdir($handle) ))
                {
     
                    /*la variable $entry ne pourra pas se voir affecté les . et les ..
                    */
                    if ($entry != "." && $entry != "..")
                    {
                      /*nous affectons le résultat dans un array */
                      $images[] = $entry ; 
                    }
                }
            }
            closedir($handle); //Nous fermons le repertoire avec closedir
            return $images;//Nous retournons le tableau de données 
        }
    }
     
    $image_dir = '/Users/romaing/Sites/rangement-image/image/vrac';
    $avions = '/Users/romaing/Sites/rangement-image/image/vrac/avions';
    $montagne = '/Users/romaing/Sites/rangement-image/image/vrac/montagne_2009';
    $image = new Image();
    $images = $image->getImages($image_dir);
     
     
     
    if(!is_dir($image_dir))
    {
        mkdir($image_dir);
    }
    foreach($image as $key => $name)
    {
        $explode = explode('-',$name);
        if($explode[4] == 'avions')
        {
            if(!is_dir($avions))
            {
                mkdir($avions);
                rename($image_dir.$name,$avions.$name);
            }
            else
            {
                rename($image_dir.$name,$avions.$name);
            }
        }
        elseif($explode[0] == 'montagne_2009')
        {
            if(!is_dir($montagne))
            {
                mkdir($montagne);
                rename($image_dir.$name,$montagne.$name);
            }
            else
            {
                rename($image_dir.$name,$montagne.$name);
            }
        }
        else
        {
            echo 'Echec de la procédure';
        }
    }
     
    ?>

  2. #2
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 379
    Points : 358
    Points
    358
    Par défaut
    Bonjour,
    Pourrais tu nous fournir un exemple de nom d'images? => le but étant de voir comment est constitué le format
    ex. 4-5 noms
    Merci

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    bonjour pour l'exemple du nom d'image c'est

    avions_001.jpeg
    avions_003.jpg
    avions_004.jpg
    avions_002.jpg
    montagne_2009_001.jpg
    montagne_2009_003.jpg
    montagne_2009_002.jpg


  4. #4
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 379
    Points : 358
    Points
    358
    Par défaut
    ha donc le format serra toujours nom_dossier_3chiffres.extension

    Alors ici donc tu vas te retrouver avec un petit soucis de nom => tu ne connais pas la taille du nom du dossier ni les characters qu'il contient
    Donc ce que tu dois faire c'est quand tu fais ton explode tu reprends la fin de ton explode $nom_fichier = $sizeof(explode($ancienNomDuFichier));ensuite tu supprimes cette partie la de ton ancien string pour avoir le nom du dossier

    voici un petit code de teste qui t'aidera à faire cela
    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
     
    <?php
        $name = "montagne_2009_001.jpg";
     
        var_dump(explode("_", $name));
     
     
        // je récupère le nom du fichier
        var_dump(explode("_", $name)[sizeof(explode("_", $name))-1]);
     
     
        //je récupère la taille du nom
        var_dump(strlen(explode("_", $name)[sizeof(explode("_", $name))-1]));
        $lenghtName = strlen(explode("_", $name)[sizeof(explode("_", $name))-1]);
     
        //je récupère le dossier
        $lengthDirectory = strlen($name) - $lenghtName - 1; // -1 pour supprimer le _ supplémentaire
        var_dump(substr($name, 0, $lengthDirectory));
     
     
    ?>
    Ce qui te donnera en plus propre et plus lisible pour débuter
    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
     
    <?php
        $name = "montagne_2009_001.jpg";
     
        var_dump(explode("_", $name));
     
     
        //quantité d'explodes 
        $qtExplodes = sizeof(explode("_", $name)) - 1;
     
     
        // je récupère le nom du fichier
        var_dump(explode("_", $name)[$qtExplodes]);
        $nomFichier = explode("_", $name)[$qtExplodes];
     
     
        //je récupère la taille du nom
        var_dump(strlen($nomFichier));
        $lenghtName = strlen($nomFichier);
     
        //je récupère le dossier
        $lengthDirectory = strlen($name) - $lenghtName - 1; // -1 pour supprimer le _ supplémentaire
        var_dump(substr($name, 0, $lengthDirectory));
        $nomDossier = substr($name, 0, $lengthDirectory);
     
     
        echo "dossier: $nomDossier<br/>\n";
        echo "fichier: $nomFichier<br/>\n";
    ?>
    je penses que cela t'aidera à résoudre ton problème
    Si besoin n'hésite pas à revenir

    bonne journée

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

    1-
    Citation Envoyé par Sparky95 Voir le message
    ha donc le format serra toujours nom_dossier_3chiffres.extension
    Perso, je ne miserais pas un kopeck là-dessus...

    2- Au contraire, je pense qu'il serai plus judicieux de proposer le choix du dossier dans le formulaire.
    Via des boutons radio, une liste déroulante,...

    3- A la rigueur, on peut envisager de cocher/sélectionner automatiquement le "bon" dossier dynamiquement en JavaScript (donc AVANT upload) si le nom de l'image contient "avion" ou "montagne".
    Tout en laissant la possibilité de changer de dossier manuellement.

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <p>
      <label>fichier : <input type="file" name="file-img" id="file-img" /></label>
    </p>
    <p>
      <label>dossier : 
        <select name="file-rep" id="file-rep">
          <option value="">...</option>
          <option value="avion">Avion</option>
          <option value="montagne">Montagne</option>
          <option value="maintenance">Maintenance</option>
        </select>
      </label>
    </p>
    Code javascript : 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
    "use strict";
    const img = document.querySelector('#file-img');
    const opts = document.querySelectorAll('#file-rep option');
    img.addEventListener('change', function(){
      let file_name = this.files[0].name;
      //console.log( file_name );
      // ----------
      // Sélecion automatique
      opts.forEach( function(opt){
        //console.log( opt.value );
        let regex = new RegExp(opt.value, "g");
        if( file_name.match(regex) )
          {
            opt.setAttribute('selected','selected');
          }
      })
      // ----------
    });
    Dernière modification par Invité ; 25/01/2020 à 18h09.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Re-bonsoir ,

    Tout d'abord merci pour vos réponse .

    Non je cherche à le faire avec du PHP et non du javascript .
    Je suis plus sur la logique que m'as donner Sparky du coup mais je ne comprend pas bien comment je dois l'indenter enfaite je me demande pourquoi actuellement avec mon code les dossiers et le triage des fichiers ne se font pas .
    Ai-je oublié quelque chose ?? Mon code est-il faux ? Il ne retourne cependant pas d'erreur ....
    Quel est le problème donc ?

    Merci d'avance

  7. #7
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 379
    Points : 358
    Points
    358
    Par défaut
    Expliques moi ce que tu fais la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $explode = explode('-',$name);
        if($explode[4] == 'avions')
        elseif($explode[0] == 'montagne_2009')

    Pour debug rien de tel que des echo ou des var_dump


    Ajout:
    De plus ce qui suit n'est pas une erreur mais une optimistation


    ici tu te répète
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if(!is_dir($avions))
            {
                mkdir($avions);
                rename($image_dir.$name,$avions.$name);
            }
            else
            {
                rename($image_dir.$name,$avions.$name);
            }
    tu peux le remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if(!is_dir($avions))
            {
                mkdir($avions);
            }
            rename($image_dir.$name,$avions.$name);
    idem pour ton elsif

    De toute façon pour ce que tu veux faire tu peux supprimer tout ça car comme expliqué dans mon dernier message tu n'as pas à mettre le nom du dossier mais à le récupérer du fichier qui se trouves dans vrac.
    ce qui te fais économiser des lignes de codes pour tes dossiers existant ainsi que tes futurs dossiers

    donc logique de programmation
    vérifier si dossier vrac exist
    si oui
        parcourir les fichiers sauf . et ..
            récupérer nom + nom dossier
            si nom dossier n'existes pas
                 créer
            déplacer fichier
       passer au suivant
    
    Pour moi il n'y a pas besoin de créer de class image,... pour le projet que tu veux faire.
    Maintenant on est en PHP donc WEB et c'est pour ça que jreaux62 est directement partis sur du JS car à priori ton but serra de faire cela pour tes membres non?
    L'idée serrait donc plutôt que créer les dossiers en fonction du nom des images, les créer au choix de l'utilisateur. Pour que l'utilisateur puisses de lui même choisir ou il mets ses images.
    Sinon pourquoi le faire en php plutôt qu'en code bash?
    En tout cas la normalement tu devrais déjà avoir toutes les cartes voir même plus pour finaliser ton projet actuel.
    Reviens avec un nouveau rendu et j'y jetterai un coup d’œil
    bonne soirée

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    OK pour l'optimisation! Je t'en remercie !
    Mais la je voudrais juste rendre mon code fonctionnel .
    J'aimerais que depuis le dossier vrac le script me tri les images en fonction de leur nom et me créer deux dossier soit avions et montagne_2009 .

  9. #9
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 379
    Points : 358
    Points
    358
    Par défaut
    desolé entre temps j'ai encore un peu édité mon message relis le et dis moi si j'ai répondu

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Oui je comprend ta logique :

    /*vérifier si dossier vrac exist

    si oui
    parcourir les fichiers sauf . et ..
    récupérer nom + nom dossier
    si nom dossier n'existes pas
    créer
    déplacer fichier
    passer au suivant
    */

    Mais n'est ce pas ce pas ce que je demande dans mon code ??
    Pourrais tu me dire ce que j'ai oublier ou mal fait . La je t'avoue être complètement perdu ...
    Merci encore de m'accorder de ton temps

  11. #11
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 379
    Points : 358
    Points
    358
    Par défaut
    niveau code purement pas d'erreurs visible à premiere vue donc => que te disses les log de ton serveur web/php?
    as tu bien les droits utilisateurs sur les dossier vrac?
    AS tu fais comme je t'ai dis des echo et var_dump dans ton code?

    Plus d'explications sur le cv pas?? => aucune image n'est transféré dans ces dossiers? Les dossiers ne se créent pas?
    On ne sait pas deviner le pourquoi cela ne fonctionnes pas

  12. #12
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 379
    Points : 358
    Points
    358
    Par défaut
    Citation Envoyé par Sparky95 Voir le message
    Expliques moi ce que tu fais la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $explode = explode('-',$name);
        if($explode[4] == 'avions')
        elseif($explode[0] == 'montagne_2009')
    tu ne m'as pas répondu à cette question non plus.

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

    OK, en fait, il s'agit juste de trier les images d'un dossier et de les déplacer dans un autre.

    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
    <?php
    // ------------
    class Image
    {
        // parcourt un dossier et récupère un array des images/fichiers
        public function getImages($dir_vrac)
        {
            //Nous ouvrons le dossier $dir_vrac avec opendir 
            // Et affectons le résultat à la variable $handle 
            if($handle = opendir($dir_vrac))
            {
               //
                while (false !== ($entry = readdir($handle) ))
                {
     
                    /*la variable $entry ne pourra pas se voir affecté les . et les ..
                    */
                    if ($entry != "." && $entry != "..")
                    {
                      /*nous affectons le résultat dans un array */
                      $images[] = $entry ; 
                    }
                }
            }
            closedir($handle); //Nous fermons le repertoire avec closedir
            return $images;//Nous retournons le tableau de données 
        }
    }
    // ------------
    // dossiers
    $dir_vrac = '/Users/romaing/Sites/rangement-image/image/vrac';
    $dir_avions = $dir_vrac.'/avions';
    $dir_montagne = $dir_vrac.'/montagne_2009';
    // ------------
    // on crée les dossiers si ils ne le sont pas déjà
    if(!is_dir($dir_vrac)){ mkdir($dir_vrac, 0777); }
    if(!is_dir($dir_avions)){ mkdir($dir_avions, 0777); }
    if(!is_dir($dir_montagne)){ mkdir($dir_montagne, 0777); }
    // ------------
    // on parcourt les images du dossier 'vrac'
    $image = new Image();
    $images = $image->getImages($dir_vrac);
    foreach($images as $name)
    {
    	if(is_file($dir_vrac.'/'.$name)) // fichier (pas dossier)
    	{
    		if(strpos($name, 'avion') !== false)
    		{
    			// on déplace dans le dossier 'avion'
    			rename($dir_vrac.'/'.$name,$dir_avions.'/'.$name);
    			echo $name.' : avions<br />';
    		}
    		elseif(strpos($name, 'montagne') !== false)
    		{
    			// on déplace dans le dossier 'montagne'
    			rename($dir_vrac.'/'.$name,$dir_montagne.'/'.$name);
    			echo $name.' : montagne<br />';
    		}
    		else
    		{
    			// rien : on laisse dans le dossier 'vrac'
    		}
    	}
    }
    // ------------
    ?>

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2018
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Un ENORME merci à toi Jreaux62 !!!!!!!!!
    Tu m'enlève vraiment une grosse épine du pied ! Je n'y serais jamais arriver sans toi !!!
    Encore un énorme merci !! Sujet clos donc
    MERCI !!!!

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 21/06/2017, 15h47
  2. Réponses: 3
    Dernier message: 21/02/2011, 23h40
  3. [Bénévole] creation d'un script php de gestion d'objets
    Par animetheque dans le forum Autres
    Réponses: 0
    Dernier message: 23/10/2010, 07h31
  4. creation de dossier script shell
    Par myriamulrik dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 01/07/2009, 13h09
  5. Réponses: 4
    Dernier message: 07/02/2009, 09h15

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