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 :

Récupérer nom fichier + nom répertoire [PHP 5.3]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut Récupérer nom fichier + nom répertoire
    Bonjour tout le monde.

    Alors voilou, je suis en train d'essayer de me faire un script pour déplacer un très grand nombre d'images.
    Plus précisément, ces images se situent dans différents dossiers ayant un nom spécifique et je dois les déplacer dans des dossiers qui ont le même nom que celui d'origine.

    Je cherche donc à stocker dans un tableau le nom de chaque image mais également le nom du répertoire dans lequel elle se trouve afin de pouvoir comparer ce nom de répertoire émetteur avec le nom du répertoire destinataire pour que les images soient déplacées au bon endroit.

    Voici la fonction avec laquelle je stocke (enfin j'essaie) le nom de fichier + répertoire émetteur :
    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
    function scanDirectory($directory) {
        $i = 0;
        $myDirectory = opendir($directory) or die('Erreur : ouverture impossible du dossier ' . $directory);
        while($entry = @readdir($myDirectory)) {
     
            if ($entry != '.' && $entry != '..') {
                if(is_dir($directory . $entry)) {
                    $files = scanDirectory($directory . $entry);
     
                    foreach ($files as &$file)
                        $file = $entry . "/" . $file;
                }
                else {
                    $files[$i] = $entry;
                }
                $i++;
            }
        }
        closedir($myDirectory);
        return $files;
    }
    Comme vous pouvez le voir, à chaque fois qu'elle va trouver un répertoire, mon tableau (que je veux retourner à la fin) est écrasé. Donc forcément, je n'aurais que les fichiers les moins récents (à cause de la fonction readdir qui prend en premier les fichiers/dossiers les plus récemments modifiés) dans mon tableau.

    Je n'arrive pas à trouver comment contourner mon souci. Je m'en remets à vous

    Merci d'avance !

    EDIT : PS : désolé si ce sujet n'est pas dans la bonne section mais je ne savais pas trop où le mettre...

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Pourquoi ne pas déplacer au fur et à mesure de ton parcours ?
    Tu trouve un dossier tu le crée si il n'existe pas , tu trouve un fichier tu le déplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $dossier = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(dirname(__FILE__)),true);
    foreach($dossier as $file)
    {
    	if($file->isDir())
    		//Création dossier
    	else
    		//Copy fichier
     
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut
    Ouais pas bête du tout ça !

    Mais, suis-je obligé de le faire avec un objet RecursiveIteratorIterator ? Avec la méthode que j'ai ça ne fonctionnerait pas ?

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu peux utiliser la méthode que tu veux , le RecursiveDirectoryIterator est juste plus simple et plus pratique à mon gout
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut
    okay, j'vais creuser la question. Merci

  6. #6
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut
    Bon j'en chie. Pour une raison inconnue, il refuse de m'ouvrir le répertoire à copier.

    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
    function copyFiles($sendDir, $receiveDir) {
        $mySendDir = opendir($sendDir) or die('Erreur : ouverture impossible du dossier ' . $sendDir);
        while($entry = @readdir($mySendDir)) {
     
            $rep = "";
            if ($entry != '.' && $entry != '..') {
     
                if(is_dir($sendDir . $entry)) {
                    copyFiles($sendDir, $receiveDir);
                    $rep = $entry;
                }
                else {
                    $myReceiveDir = opendir($receiveDir) or die('Erreur : ouverture impossible du dossier ' . $receiveDir);
                    while($newEntry = @readdir($myReceiveDir)) {
     
                        if ($newEntry != '.' && $newEntry != '..') {
     
                            if (is_dir($newEntry) && $newEntry == $rep)
                                exec("cp " . $sendDir . $newEntry . " " . $receiveDir  . $rep);
                            else
                                exec("mkdir " . $receiveDir . $rep);
                        }
                    }
                    closedir($myReceiveDir);
                }
            }
        }
        closedir($mySendDir);
    }
     
    copyFiles("/home/mickael/Documents/dossier_from/", "/home/mickael/Documents/dossier_to/");
    J'ai vérifié les permissions des dossiers, tout est bon. Chiant

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Par défaut
    Salut,

    Quel message d'erreur ton opendir() reporte t-il ?


    Cordialement,


    Kohntark-

  8. #8
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut
    Plop.

    Ben vu que j'ai mis un "or die()" il me dit ce qu'il y a dedans. Mais si j'enlève le die(), ça ne me retourne aucune erreur.

    Peut-être faut-il que je rajoute quelque chose pour qu'il me retourne une erreur ?

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Par défaut
    Citation Envoyé par DarkSeiryu Voir le message
    Plop.

    Ben vu que j'ai mis un "or die()" il me dit ce qu'il y a dedans. Mais si j'enlève le die(), ça ne me retourne aucune erreur.

    Peut-être faut-il que je rajoute quelque chose pour qu'il me retourne une erreur ?
    C'est surtout que l'affichage des erreurs ne doit pas être activé.
    Pour le debug tu peux placer ces lignes tout en haut de ta page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    ini_set('display_errors', 1);
    error_reporting(-1);
    ?>

    Cordialement,

    Kohntark-

  10. #10
    Membre très actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Par défaut
    ok merci. Voici l'erreur retournée :
    Warning: opendir(/home/mickael/Documents/dossier_from/): failed to open dir: Too many open files in /var/www/projet-photos/fonctions.php on line 4

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 45
    Par défaut
    Citation Envoyé par DarkSeiryu Voir le message
    ok merci. Voici l'erreur retournée :
    Too many open files
    bah voilà, tu as ta réponse.

    A quoi ressemble l'arborescence sur laquelle tu travailles ?
    nb de fichiers par répertoires, nb de dossiers, profondeurs des dossiers, ...
    juste pour avoir une idée à la louche.

    Manifestement ta fonction récursive liée à cette structure ne pourra fonctionner telle quelle.

    C'est une opération que tu ne dois réaliser qu'une seule fois ou se reproduira t elle régulièrement dans l'avenir ?


    Cordialement,


    Kohntark-

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/10/2014, 13h05
  2. [SSRS 2k5] nom de fichier, de répertoire
    Par pastoi dans le forum SSRS
    Réponses: 2
    Dernier message: 17/03/2009, 10h50
  3. Réponses: 3
    Dernier message: 06/05/2008, 14h32
  4. Comment récupérer le nom d'un répertoire ?
    Par kinou dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/06/2007, 17h43
  5. [VBA]récupérer nom fichier
    Par jackfred dans le forum Général VBA
    Réponses: 4
    Dernier message: 27/04/2007, 19h57

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