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 :

Deplacement de fichiers dans un répertoire portant leur nom


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Par défaut Deplacement de fichiers dans un répertoire portant leur nom
    Bonjour,

    J'essaye de réaliser un script PHP me permettant de lire le contenu d'un répertoire contenant des images pour les copier dans un répertoire précis et même dans un sous-répertoire portant son nom.

    Chaque image est identifiée par un nom de fichier explicite de type nom-000.jpg.

    Je dois me servir d'une classe qui va analyser via une méthode le contenu du répertoire source. Une autre méthode sert a récupérer le nom du fichier et enfin une troisième méthode est censée transférer le fichier dans un nouveau répertoire de tri et placé dans un sous dossier portant son nom.

    Code PHP : 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
    <?php
     
        require('config.php');
        require('Image.php');
     
        $success= false;
     
        if(!empty($_POST['submit'])){
     
     
     
            $image = new Image();
            $images = $image->getImages(IMAGE_DIR_PATH);
        }
     
    ?>
    <!DOCTYPE html>
    <html>
    	<head>
            <link href="styles.css" rel="stylesheet" type="text/css" />
    	</head>
    	<body>
            <div class="container">
                <p>Analysons votre répertoire d'images pour les trier par catégories ...</p>
                <form method="post" action="#">
                    <input type="submit" name="submit" value="analyse de vos images">
                </form>
            </div>
            <?php 
            if($success == true){
                echo '<p class="success"> Vos fichiers ont bien été traités et déplacés.</p>';
            }
            ?>
        </body>
    </html>

    Mon fichier classe Image.php :
    Code PHP : 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
    <?php
     
        class Image
        {
            public function _construct()
            {
                // fonction vide pour ce projet
            } 
            public function getImages($image_dir)
            {
                $i = 0;
                if ($handle = opendir($image_dir))
                {
                    while (false !== ($entry = readdir($handle)))
                    {
                        if ($entry !="." && $entry !="..")
                        {
                            $i++;
                            $images[$i]['filename'] = $entry;
     
                            $this->identificationFile($images[$i]['filename']);
     
                            $this->moveFile($images[$i]['filename']);
                        }
                    }
                }
                closedir($handle);
                return $images;
            }
     
            public function identificationFile($filename)
            {
                    $result = explode('-', $filename);
                    $folder = $result[0];
     
                    return $folder;
            }
     
            public function moveFile($filename)
            {
                $action = rename(IMAGE_DIR_PATH . $filename , IMAGE_DIR_DEST . $folder .'/' . $filename);
     
                if ($action == true) {
     
                    $success = true;
                    return $success;
                }
                else {
                    echo 'Une erreur est survenue';
                }
            }
        }
     
    ?>

    Mes variables sont définies :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
     
        define ('WEB_DIR_NAME', 'projet');
        define ('IMAGE_DIR_NAME', 'img');
        define ('IMAGE_DEST_NAME', 'tri');
     
        define ('IMAGE_DIR_PATH', $_SERVER['DOCUMENT_ROOT'] . WEB_DIR_NAME . '/' . IMAGE_DIR_NAME . '/');
        define ('IMAGE_DIR_DEST', $_SERVER['DOCUMENT_ROOT'] . '/' . WEB_DIR_NAME . '/' . IMAGE_DEST_NAME . '/');
        define ('IMAGE_DIR_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/' . WEB_DIR_NAME . '/' . IMAGE_DIR_NAME . '/');
        define ('IMAGE_DEST_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/' . WEB_DIR_NAME . '/' . IMAGE_DEST_NAME . '/');
        define ('WEB_DIR_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/' . WEB_DIR_NAME . '/');
    ?>

    Mon problème est le suivant :
    Tout paraît fonctionner à une exception près, les fichiers sont transférés en vrac et il n'y a donc pas de sous-répertoires créés. Il semblerait qu'il y ait un problème de retour de la variable $folder (ainsi que de la variable $success).

    Pourriez-vous me donner quelques pistes pour trouver mon erreur.

    Un grand merci par avance

  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
    Citation Envoyé par CCACC02 Voir le message
    Il semblerait qu'il y ait un problème de retour de la variable $folder
    Je suppose qu'on parle du $folder à la fin de la fonction identificationFile ? Dans ce cas, oui il y a un problème : tu ne fais rien de ce retour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $images[$i]['filename'] = $entry;
     
    $this->identificationFile($images[$i]['filename']);
     
    $this->moveFile($images[$i]['filename']);
    Il faudrait récupérer le retour identificationFile et le passer en paramètre à moveFile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $images[$i]['filename'] = $entry;
     
    $folder = $this->identificationFile($images[$i]['filename']);
     
    $this->moveFile($images[$i]['filename'], $folder);
    avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public function moveFile($filename, $folder)
            {
                $action = rename(IMAGE_DIR_PATH . $filename , IMAGE_DIR_DEST . $folder .'/' . $filename);
     
                if ($action == true) {
     
                    $success = true;
                    return $success;
                }
                else {
                    echo 'Une erreur est survenue';
                }
            }
        }
    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 confirmé
    Homme Profil pro
    etudiant developpeur web
    Inscrit en
    Février 2018
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : etudiant developpeur web

    Informations forums :
    Inscription : Février 2018
    Messages : 99
    Par défaut Oui justement, je l'avais fait... du coup ca fonctionne mieux
    $this->moveFile($images[$i]['filename']);[/code]
    Il faudrait récupérer le retour identificationFile et le passer en paramètre à moveFile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $images[$i]['filename'] = $entry;
     
    $folder = $this->identificationFile($images[$i]['filename']);
     
    $this->moveFile($images[$i]['filename'], $folder);
    Merci, c'était ce que j'avais fait au départ mais comme un boulet j'avais oublié de faire l'affectation $folder = $this... du coup comme cela ne fonctionnait pas je l'avais enlever pensant que je m'étais trompé...

    Du coup cette fois, la variable $folder ne pose plus de problème mais je ne parviens toujours pas à ce que mes images se dispatchent dans un sous-répertoire portant le nom des images

    Donc, j'ai ajouté ceci :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function identificationFile($filename)
            {
                    $result = explode('-', $filename);
                    $folder = $result[0];
     
                    $chemin = IMAGE_DIR_DEST . $folder;
     
                    if(file_exists($chemin) != true){
                        mkdir(IMAGE_DIR_DEST.$folder);
                    }
     
                    return $folder;
            }
    Cette fois le sous-répertoire se créé et les images se copient à l'intérieur de chaque sous répertoire.

    Mais je reste sans nouvelles de mon message de succès de l'operation

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 31/08/2018, 17h46
  2. [XL-2010] Copier des fichiers dans des répertoires différents selon leur nom
    Par paulinette dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/01/2017, 20h50
  3. Réponses: 8
    Dernier message: 02/08/2016, 14h02
  4. Réponses: 6
    Dernier message: 12/06/2015, 00h44
  5. Réponses: 4
    Dernier message: 22/12/2003, 11h12

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