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

Symfony PHP Discussion :

Multi BDD connexion refusée


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2017
    Messages : 2
    Par défaut Multi BDD connexion refusée
    Bonjour tous le monde.
    Je bosse sur un projet où je dois importer des données d'une base de données extérieur au site où l'application est hébergé.
    Je vais essayer de schématiser :

    Serveur 1:
    OVH
    héberge l'application symfony
    base de donnée habituelle.
    identifiant.mysql.db

    Serveur 2:
    OVH
    base de données accessible par un logiciel
    adresse IP pour se connecter sur la BDD

    Je voudrais pouvoir récupérer les utilisateurs de la base de données du serveur 2 afin de les traiter avec symfony pour crypter les mots de passe etc etc.
    Tout ceci sera exécuté tous les jours pendant la nuit. Donc avec une CRON.

    j'ai utilisé le tuto https://symfony.com/doc/current/doct..._managers.html

    Voilà mon config.yml :

    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
     
    # Doctrine Configuration
    doctrine:
        dbal:
            default_connection : default
            connections:
                default:
                    driver: pdo_mysql
                    host: '%database_host%'
                    port: '%database_port%'
                    dbname: '%database_name%'
                    user: '%database_user%'
                    password: '%database_password%'
                    charset: UTF8
                alias:
                    driver: pdo_mysql
                    host: '%alias_database_host%'
                    port: '%alias_database_port%'
                    dbname: '%alias_database_name%'
                    user: '%alias_database_user%'
                    password: '%alias_database_password%'
                    charset: UTF8
            # if using pdo_sqlite as your database driver:
            #   1. add the path in parameters.yml
            #     e.g. database_path: '%kernel.project_dir%/var/data/data.sqlite'
            #   2. Uncomment database_path in parameters.yml.dist
            #   3. Uncomment next line:
            #path: '%database_path%'
     
        orm:
            default_entity_manager: default
            entity_managers:
                default :
                    connection: default
                    mappings:
                        AppBundle: ~
                        EncoursBundle: ~
                        PaiementBundle: ~
                        UserBundle: ~
                alias:
                    connection: alias
                    mappings:
                        AppBundle: ~
                        EncoursBundle: ~
                        PaiementBundle: ~
                        UserBundle: ~
    J'ai créé une commande symfony que j'ai nommé loadUser

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
     
    <?php
     
    namespace User\UserBundle\Command;
     
    use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
    use Symfony\Component\Console\Helper\ProgressBar;
    use Symfony\Component\Console\Input\InputArgument;
    use Symfony\Component\Console\Input\InputInterface;
    use Symfony\Component\Console\Input\InputOption;
    use Symfony\Component\Console\Output\OutputInterface;
    use User\UserBundle\Entity\User;
     
    class LoadUserCommand extends ContainerAwareCommand
    {
        protected function configure()
        {
            $this
                ->setName('loadUser')
                ->setDescription('...')
                ->addArgument('argument', InputArgument::OPTIONAL, 'Argument description')
                ->addOption('option', null, InputOption::VALUE_NONE, 'Option description')
            ;
        }
     
        protected function execute(InputInterface $input, OutputInterface $output)
        {
            $argument       = $input->getArgument('argument');
            $output->writeln("Début de limportation des utilisateurs....");
     
            $manager        = $this->getContainer()->get("doctrine")->getManager("default");
            $aliasManager   = $this->getContainer()->get("doctrine")->getManager("alias");
     
     
            $usersImport    = $aliasManager->getRepository("UserBundle:User")->getAllImport();
            $users          = $manager->getRepository("UserBundle:User")->findAll();
     
            $encoder = $this->getContainer()->get("security.password_encoder");
     
            $progress = new ProgressBar($output, count($usersImport));
            $progress->setRedrawFrequency(5);
            $progress->setFormat("very_verbose");
            $progress->start();
     
            $count = 0;
            $bach = 20;
     
            if(empty($users)){
                foreach ($usersImport as $userImport){
     
                    $numCompta          = $userImport->getNumCompta();
                    $numEtablissement   = $userImport->getNumEtablissement();
                    $nom                = $userImport->getNom();
                    $prenom             = $userImport->getPrenom();
                    $email              = $userImport->getEmail();
                    $adresse            = $userImport->getAdresse();
                    $adresseBIS         = $userImport->getAdresse2();
                    $codePostal         = $userImport->getCodePostal();
                    $ville              = $userImport->getVille();
                    $identifiant        = $userImport->getIdentifiant();
                    $motdepasse         = trim($userImport->getMotPasse());
                    $codePays           = $userImport->getCodePays();
                    $telephone          = $userImport->getTelephone();
                    $telPort            = $userImport->getTelephonePort();
                    $actif              = true;
                    $firstConnexion     = true;
     
     
                    $user = new User();
     
                    $user->setNumCompta($numCompta);
                    $user->setNumEtablissement($numEtablissement);
                    $user->setNom($nom);
                    $user->setPrenom($prenom);
                    $user->setEmail($email);
                    $user->setAdresse($adresse);
                    $user->setAdresse2($adresseBIS);
                    $user->setCodePostal($codePostal);
                    $user->setVille($ville);
                    $user->setIdentifiant($identifiant);
                    $user->setMotPasse($encoder->encodePassword($user, $motdepasse));
                    $user->setCodePays($codePays);
                    $user->setTelephone($telephone);
                    $user->setTelephonePort($telPort);
                    $user->setActif($actif);
                    $user->setPremierConnexion($firstConnexion);
                    $user->setDateCreation(new \DateTime());
     
                    $manager->persist($user);
     
                    if (($count % $bach) === 0){
                        $manager->flush();
                        $manager->clear();
                    }
                    $progress->advance();
                    $count ++;
                }
                $manager->flush();
                $manager->clear();
            }else{
                foreach ($usersImport as $userImport){
                    $numCompta          = $userImport->getNumCompta();
                    $numEtablissement   = $userImport->getNumEtablissement();
                    $nom                = $userImport->getNom();
                    $prenom             = $userImport->getPrenom();
                    $email              = $userImport->getEmail();
                    $adresse            = $userImport->getAdresse();
                    $adresseBIS         = $userImport->getAdresse2();
                    $codePostal         = $userImport->getCodePostal();
                    $ville              = $userImport->getVille();
                    $codePays           = $userImport->getCodePays();
                    $telephone          = $userImport->getTelephone();
                    $telPort            = $userImport->getTelephonePort();
     
                    $user = $manager->getRepository("UserBundle:User")->getUserByNumCompta($numCompta);
     
                    if ($user){
                        if($numEtablissement !== $user->getNumEtablissement()){
                            $user->setNumEtablissement($numEtablissement);
                        }
     
                        if($nom !== $user->getNom()){
                            $user->setNom($nom);
                        }
                        if($prenom !== $user->getPrenom()){
                            $user->setPrenom($prenom);
                        }
                        if($email !== $user->getEmail()){
                            $user->setEmail($email);
                        }
                        if($adresse !== $user->getAdresse()){
                            $user->setAdresse($adresse);
                        }
                        if($adresseBIS !== $user->getAdresse2()){
                            $user->setAdresse2();
                        }
                        if($codePostal !== $user->getCodePostal()){
                            $user->setCodePostal($codePostal);
                        }
                        if($ville !== $user->getVille()){
                            $user->setVille($ville);
                        }
                        if($codePays !== $user->getCodePays()){
                            $user->setCodePays($codePays);
                        }
                        if($telephone !== $user->getTelephone()){
                            $user->setTelephone($telephone);
                        }
                        if($telPort !== $user->getTelephonePort()){
                            $user->setTelephonePort($telPort);
                        }
                        $manager->flush();
                    }
                    $progress->advance();
                }
            }
            $progress->finish();
            $output->writeln('');
            $output->writeln('User importés.');
        }
     
    }
    En local sur ma machine tout fonctionne parfaitement.
    Cependant quand je met le site en production donc sur le serveur 1, j'ai la connexion au serveur 2 qui est refusée quand je tape la commande bin/console loadUser
    Pour tester si c'était un blocage du serveur 2 sur les connexions entrante j'ai fait un script qui n'utilise pas symfony où j'initialise mes 2 connexions :

    test.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SERVEUR 2
    $dbAlias = new PDO("mysql:host=xxx.xxx.xxx.xxx;dbname=xxxxxxxxx", "xxxxxxxxx", "xxxxxxxx");
    $dbAlias->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    SERVEUR 1
    $db = new PDO("mysql:host=identifiantovh.mysql.db;dbname=xxxxxxxx", "xxxxxxxxxxx", "xxxxxxxxxxxx");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    ici je n'ai pas de soucis de connexion.
    j'ai donc essayé de tout faire avec mon script et lancer les commandes symfony avec php.
    Voici donc ma nouvelle page test.php :

    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
     
    <?php
    SERVEUR 2
    $dbAlias = new PDO("mysql:host=xxx.xxx.xxx.xxx;dbname=xxxxxxxxx", "xxxxxxxxx", "xxxxxxxx");
    $dbAlias->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    SERVEUR 1
    $db = new PDO("mysql:host=identifiantovh.mysql.db;dbname=xxxxxxxx", "xxxxxxxxxxx", "xxxxxxxxxxxx");
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     
    $userStmt   = $dbAlias->query("SELECT * FROM User_Import");
    $users      = $userStmt->fetchAll(PDO::FETCH_ASSOC);
     
     
    $encours_stmt   = $dbAlias->query("SELECT * FROM Encours_Import");
    $encours        = $encours_stmt->fetchAll(PDO::FETCH_ASSOC);
     
    $db->exec("DELETE FROM User_Import");
    $db->exec("DELETE FROM Encours_Import");
     
    function placeholders($text, $count=0, $separator=","){
        $result = array();
        if($count > 0){
            for($x=0; $x<$count; $x++){
                $result[] = $text;
            }
        }
        return implode($separator, $result);
    }
     
     
    foreach($users as $row){
        $fields = implode(",", array_keys($row));
        $test   = placeholders("?", sizeof(array_values($row)), ",");
        try{
            $stmt = $db->prepare("INSERT INTO User_Import (".$fields.") VALUES (".$test.")");
            if($stmt){
                $stmt->execute(array_values($row));
            }
        }catch (PDOException $e){
            echo $e->getMessage();
        }
    }
     
    foreach ($encours as $encour){
        $fields = implode(",", array_keys($encour));
        $values = placeholders("?", sizeof(array_values($encour)), ",");
     
        try{
            $stmt = $db->prepare("INSERT INTO Encours_Import (".$fields.") VALUES (".$values.")");
            if($stmt){
                $stmt->execute(array_values($encour));
            }
        }catch (PDOException $e){
            echo $e->getMessage();
        }
    }
     
     
    exec("php ".__DIR__."/bin/console loadUser");
     
    ?>
    ici j'ai bien le transfert des données qui se réalise mais la commande symfony n'est elle pas exécutée.

    Donc en résumé peut importe la méthode 1 ou la méthode 2 tant que ça fonctionne ça m'est égal qu'elle partie vous pouvez m'aider à résoudre. Je suis désespéré ça fait 1 semaine que je cherche une solution et je ne trouve rien.
    J'espère que c'est clair ce que j'ai dis.
    Merci d'avances pour l'aide bénie soit celui qui m'aidera à trouver la solution
    Cordialement.

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Par défaut
    juste à la fin du code, l' exec me plait pas du tout .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exec ("/usr/local/bin/php /var/www/le_script.php > /dev/null&");
    Sa dépend bien sur de l'environnement, avec ubuntu tu peux essayer comme la dessus.
    Pour faire des choses belles,utilisant au lieu de exec , shell_exec() pour recuperer son retour.
    C'est vrai tu n'as pas besoin de retour maintenant ok mais en cas de debug ?
    Je propose que tu mets ton script ou commande dans un try catch avec un return obligatoire et detaillé.
    aprés si ton shell_exec return OK , c'est que tout va bien sinon tu recupere l'exception .....

    Sinon avec exec tout court, ca peut faire l'affaire.
    même avec exec, c'est mieux de construire la chaine commande $str='php ....' puis juste mettre exec($str); pour que tu puisse faire echo $str si tu veux voir c'est la commande exécuté vraiment.

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2017
    Messages : 2
    Par défaut
    J'ai essayé de ce que tu m'as dis et je n'obtiens rien, j'ai meme glissé un envoi de mail dans la command appelé et rien du tout. il veux pas du tout l'appeler on dirais même qu'il zappe cette partie là.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    try{
        $str = "/usr/local/bin/php ".ROOT."/bin/console loadUser > /dev/null&";
        $return = exec($str);
        mail("m.alvarez.iglisias@squarepartners.com", "test", $return);
    }catch(Exception $e){
        mail("m.alvarez.iglisias@squarepartners.com", "Erreur de script ALIAS PAIEMENT", $e);
    }
    dans l'exemple j'ai le mail envoyé avec comme sujet "test" mais il est vide.

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/03/2016, 15h53
  2. [JDBC]connexion refuse mysql debian
    Par dietrich dans le forum JDBC
    Réponses: 9
    Dernier message: 20/01/2006, 09h13
  3. Localhost: connexion refusée
    Par JavaAcro dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 23/12/2005, 10h51
  4. [mysql 4.1][phpmyadmin 2.7.0pl1][php4.4.1] connexion refusée
    Par frochard dans le forum Installation
    Réponses: 2
    Dernier message: 18/12/2005, 15h45
  5. Réponses: 1
    Dernier message: 23/10/2005, 13h04

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