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 :

copier fichiers vers 4 chemins


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Points : 347
    Points
    347
    Par défaut copier fichiers vers 4 chemins
    Bonjour,

    Je pars du principe suivant : j'ai 2 fonctions qui déffinisent le chemins de sauvegarde de mes fichiers uploadés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <?php
    protected function getUploadRootDir()
     {
    return __DIR__.'/../../../../web/'.$this->getUploadDir();
    }
     
    protected function getUploadDir()
    {
    return 'Test/';
    }

    ../web/Test/ c'est répertoire qui contient mes fichiers uploadés !
    ca marche c'est cool !!

    maintenant je veux définir 4 chemins différents :

    ../web/A/Test/
    ../web/B/Test/
    ../web/C/Test/
    ../web/D/Test/
    j'ai modifier :

    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
     
    <?php
    protected function getUploadRootDir()
    {
    $chemins = array();
     
    $chemins['a'] = __DIR__.'/../../../../web/A/'.$this->getUploadDir();
    $chemins['b'] = __DIR__.'/../../../../web/B/'.$this->getUploadDir();
    $chemins['c'] = __DIR__.'/../../../../web/C/'.$this->getUploadDir();
    $chemins['d'] =__DIR__.'/../../../../web/D/'.$this->getUploadDir();
     
     return $chemins;
    }
    protected function getUploadDir()
    {
    return 'Test/';
    }
    J'ai une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: is_dir() expects parameter 1 to be string, array given in
    Une idée ? un aide ?

    Merci énormément !!

  2. #2
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    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 : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    Salut
    ton message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Warning: is_dir() expects parameter 1 to be string, array given in
    sous-entend qu tu passes un array à is_dir(), sans doute $chemins, au lieu de lui passer une chaîne de caractère comme $chemins['a'].
    Ton code en dit quoi ?
    My daughter, my laptop, my bike and my double-sticks...

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Points : 347
    Points
    347
    Par défaut
    je peux trés bien passer l'élément $chemins['a'] du tableau mais y en 3 autres !!

  4. #4
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    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 : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par aitiahcene Voir le message
    je peux trés bien passer l'élément $chemins['a'] du tableau mais y en 3 autres !!
    Tu peux créer une méthode are_dir() à laquelle tu passes ton tableau, et qui te renvoie le booléen:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    protected function are_dir($chemins)
    {
        foreach ($chemins as $chemin)
        {
           if (!is_dir($chemin))
               return false;
        }
        return true;
    }
    Une méthode comme ça ne fait que tester les chemins dans leur ensemble: si un est faux, la méthode renvoi faux...
    à affiner si tu as besoin d'info plus précises.
    edit: j'ai répondu un peu vite: j'ai oublié le return true.
    My daughter, my laptop, my bike and my double-sticks...

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Points : 347
    Points
    347
    Par défaut
    Oui stp j'ai bsion de + d'infos, tu peux me définir comment la fonction re_dir () prend la valeur du $chemins['a'] car ce n'est pas claire pour moi le foreach et is_dir !!

    Merci bcp kalimukti.

  6. #6
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    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 : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par aitiahcene Voir le message
    Oui stp j'ai bsion de + d'infos, tu peux me définir comment la fonction re_dir () prend la valeur du $chemins['a'] car ce n'est pas claire pour moi le foreach et is_dir !!
    Tu passes le tableau $chemins en paramètre à la fonction.
    Le foreach va parcourir chacun des éléments ($chemin) du tableau, c'est à dire, chacune des 4 chaînes de caractère.
    Tu peux tester l'effet du foreach avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    protected function dump($chemins)
    {
        foreach ($chemins as $chemin)
        {
           var_dump($chemin);
        }
    }
    Du coup, la fonction teste le is_dir sur chacune des chaines de caractère, et retourne 'false' si une de ces chaînes renvoie à un répertoire qui n'existe pas (le (!is_dir()). Si toutes les chaînes renvoient à un répertoire qui existe, la méthode va jusqu'au 'return true'.
    je sais pas si ça répond à tes questions...
    My daughter, my laptop, my bike and my double-sticks...

  7. #7
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Points : 347
    Points
    347
    Par défaut
    Oui merci je comprends très bien !! j'ai tenté ceci :


    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
    protected function are_dir($chemins)
        {
        foreach ($chemins as $chemins['a'])
        {
           if (!is_dir($chemins['a']))
               return false;
        }
    	foreach ($chemins as $chemins['b'])
        {
           if (!is_dir($chemins['b']))
               return false;
        }
        ....
        return $chemins;
        }

  8. #8
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    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 : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    Citation Envoyé par aitiahcene Voir le message
    Oui merci je comprends très bien !! j'ai tenté ceci :


    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
    protected function are_dir($chemins)
        {
        foreach ($chemins as $chemins['a'])
        {
           if (!is_dir($chemins['a']))
               return false;
        }
    	foreach ($chemins as $chemins['b'])
        {
           if (!is_dir($chemins['b']))
               return false;
        }
        ....
        return $chemins;
        }
    Tes deux foreach font deux fois exactement la même chose. Je suis même surpris qu'ils fonctionnent comme ça.
    ce que tu mets après le as est une pure convention, tu pourrais mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
         foreach ($chemins as $jesuisjusteuneconvention)
        {
           if (!is_dir($jesuisjusteuneconvention))
               return false;
        }
    ça ferait encore exactement la même chose...
    My daughter, my laptop, my bike and my double-sticks...

  9. #9
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    a la fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    protected function getUploadRootDir()
    {
    $chemins = array();
     
    $chemins['a'] = __DIR__.'/../../../../web/A/'.$this->getUploadDir();
    $chemins['b'] = __DIR__.'/../../../../web/B/'.$this->getUploadDir();
    $chemins['c'] = __DIR__.'/../../../../web/C/'.$this->getUploadDir();
    $chemins['d'] =__DIR__.'/../../../../web/D/'.$this->getUploadDir();
     
     return $chemins;
    }
    $this->getUploadDir(); return un array, donc si


    $root = $this->getUploadDir();//print_r($root);
    et si le chemin et dans $root['file'];

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    protected function getUploadRootDir()
    {
    $chemins = array();
    $root  = $this->getUploadDir();
     
    $chemins['a'] = __DIR__.'/../../../../web/A/'.$root['file'];
    $chemins['b'] = __DIR__.'/../../../../web/B/'.$root['file'];
    $chemins['c'] = __DIR__.'/../../../../web/C/'.$root['file'];
    $chemins['d'] =__DIR__.'/../../../../web/D/'.$root['file'];
     
     return $chemins;
    }

    je vois po trop ou est le problème en fait... ( c'est un sujet d’étude, ou koi, car c'est pas la première fois que je vois ce code récemment ??)
    Conception / Dev

  10. #10
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Points : 347
    Points
    347
    Par défaut
    eh bien voila : le tableau de dossiers $chemins me passe 4 chemins différents dans les quels mes fichiers seront copier, ce sont les chemins:

    /../../../../web/A/Test/
    /../../../../web/B/Test/
    /../../../../web/C/Test/
    /../../../../web/D/Test/

    et le code ne change rien !! pour quoi $root['file']??

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    si tu comprends pas que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     $this->getUploadDir(); //retourne un tableau
     
    //et que pour voir ce que cela contient il faut faire 
     
    $toto =  $this->getUploadDir();
    print_r($toto);
     
    $tutu =  $this->getUploadDir();
    print_r($tutu);
    tu as de bonnes raisons de passer par la case départ, cad, le tuto pour les grands débutants pressés

    http://sylvie-vauthier.developpez.co...rand-debutant/

    car la , je vois pas comment d'aider, désolé...
    Conception / Dev

  12. #12
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2012
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 394
    Points : 347
    Points
    347
    Par défaut
    ca change rien dans le sens que j'ai tjrs cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: is_dir() expects parameter 1 to be string, array given in .../Symfony/vendor/symfony/src/Symfony/Component/HttpFoundation/File/File.php line 527
    ligne

    Je bosse avec le framework Sf2, l'erreur est dans la ligne 3
    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
     public function move($directory, $name = null)
        {
            if (!is_dir($directory)) {
                if (false === @mkdir($directory, 0777, true)) {
                    throw new FileException(sprintf('Unable to create the "%s" directory', $directory));
                }
            } elseif (!is_writable($directory)) {
                throw new FileException(sprintf('Unable to write in the "%s" directory', $directory));
            }
     
            $target = $directory.DIRECTORY_SEPARATOR.(null === $name ? $this->getBasename() : basename($name));
     
            if (!@rename($this->getPathname(), $target)) {
                $error = error_get_last();
                throw new FileException(sprintf('Could not move the file "%s" to "%s" (%s)', $this->getPathname(), $target, strip_tags($error['message'])));
            }
     
            chmod($target, 0666);
     
            return new File($target);
        }
    }

  13. #13
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Encore une fois, si tu fais pas la différence entre un tableau et une valeure,

    un tableau =
    ( frigo =>( fruit = bannane,légume = courgette ) , placart ( assiette = 3, fourchette = 10 ) )

    pour avoir la valeur fourchette

    tableau[placart][fourchette];


    si tu veux faire une maison sans connaitre les principes de bases , change de métier... et si tu pense qu'utiliser un cms que tu ne comprendra jamais va t'aider , continu comme ca.... Désolé, pour les vannes , mais la c'est les bases....
    Conception / Dev

  14. #14
    Membre confirmé
    Avatar de kalimukti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2011
    Messages
    262
    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 : Octobre 2011
    Messages : 262
    Points : 451
    Points
    451
    Par défaut
    Assez d'accord: révise la structure d'un tableau en PHP et les opérations basiques pour les manipuler, et toutes les réponses de ce thread te paraîtront évidentes. Va voir l'étape 4 du tuto donné pas Ascito, on pourra pas mieux t'expliquer tout ça ici...
    My daughter, my laptop, my bike and my double-sticks...

Discussions similaires

  1. [2.x] Upload des fichiers vers 4 chemins différents
    Par aitiahcene dans le forum Symfony
    Réponses: 16
    Dernier message: 05/07/2012, 10h14
  2. [Toutes versions] Copier fichier vers autre emplacement
    Par ridokou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/11/2011, 14h56
  3. [XL-2007] VBA Copier fichier vers dossier
    Par Floorfiler dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/01/2011, 22h59
  4. [Fichier] Représenter un chemin vers un fichier
    Par Invité dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 26/03/2007, 19h17
  5. copier fichier du serveur vers le client fso
    Par nigiri dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/02/2006, 13h26

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