1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    février 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : février 2017
    Messages : 9
    Points : 2
    Points
    2

    Par défaut Service d'import en BDD

    Bonjour,

    Dans mes projets, j'ai besoin d'importer en BDD des infos (via des parser web ou des fichiers locaux).
    J'ai donc créé dans la classe de mon module une méthode qui réalise cet import que j'appel depuis une vue.

    cet appel se déroule depuis une page du type :
    index.php?:nav=module::import

    Je souhaiterai croner ces imports. Sous symfony, il y a des notions de services que l'on peut appeler directement depuis l'user systeme root ou www-data.

    Quelle serait la méthode la plus pratique avec MKframework pour réaliser cet automatisme ?
    Je pensais à du curl avec une authentification, mais peut-être y a t'il une méthode plus élégante déjà prévue dans le framework que je n'aurai pas encore vu dans les tutos ou dans ce forum ?


    D'avance merci.

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    4 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 4 814
    Points : 18 561
    Points
    18 561
    Billets dans le blog
    17

    Par défaut

    Oui vous avez plus simple que de passer par curl

    dans votre répertoire public/

    créé le fichier suivant cmd.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
    <?php
    /*-----------------------------------------------------------------------------------
    Auteur: Mika http://mkdevs.com
    Page: tout passe par la; c'est le moteur du site, il gere les appels aux modules/action...
    
    Description:
    C'est ici que vous pouvez installer ci-besoin un compteur de visite
    -----------------------------------------------------------------------------------*/
    
    /* decommenter pour utiliser zendframework a partir de la 1.8
    set_include_path(get_include_path() . PATH_SEPARATOR .'../../lib/');
    
    require_once 'Zend/Loader/Autoloader.php';
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->setFallbackAutoloader(false);
    */
    
    $tParam=array(
    	':nav'=> $argv[1]
    );
    
    //on parse le fichier ini pour trouver l'adresse de la librairie
    $tIni=parse_ini_file('../conf/path.ini.php',true);
    //enregistrement de l'auto loader du framework
    include($tIni['path']['lib'].'/class_root.php');
    
    //enregistrement de l'autoloader
    include($tIni['path']['plugin'].'/plugin_autoload.php');
    spl_autoload_register(array('plugin_autoload','autoload'));
    
    
    //pour gerer toutes les erreurs en exception
    function exception_error_handler($errno, $errstr, $errfile, $errline ) {
      throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    }
    set_error_handler("exception_error_handler");
    
    $oRoot=new _root();
    $oRoot->setConfigVar('path',$tIni['path']);
    
    //decommenter pour activer le cache de fichier de configuration
    //$oRoot->setConfigVar('cache.conf.enabled',1);
    
    $oRoot->addConf('../conf/mode.ini.php');
    $oRoot->addConf('../conf/connexion.ini.php');
    $oRoot->addConf('../conf/site.ini.php');
    $oRoot->addRequest($tParam);
    $oRoot->run();
    et pour appeler par exemple votre module import
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cd cheminDeLaplication/public
    php cmd.php module::import
    Comme vous pouvez le voir, pour faire de la ligne de commande on créé un tableau qui recoit pour le champ ":nav" la valeur du premier argument de la ligne de commande ($argv[1])
    ensuite, libre à vous de lui passer un argument supplémentaire au format json ou autre et de le renseigner dans ce tableau $tParam qui sera accessible via l'habituel _root::getParam()
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    février 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : février 2017
    Messages : 9
    Points : 2
    Points
    2

    Par défaut

    Merci pour la réponse,
    cela fonctionne !

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    février 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : février 2017
    Messages : 9
    Points : 2
    Points
    2

    Par défaut

    J'ai encore deux petites questions :

    Si un des modules est configuré avec une authentification requise, comment dois-je configurer mon script cmd.php ?
    la configuration se trouve ici : $oRoot->addConf('../conf/connexion.ini.php');
    mais est-ce que je peux la modifier à la volée ? je dois lui passer des paramètres d'authentification ?




    Concrètement le passage de paramètres doit prendre quelle syntaxe ?
    si j'essaye d'afficher un show?id=1

    je lance la commande:
    php cmd.php module::show 1

    voila mon tableau de paramètres dans cmd.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $tParam=array(
        ':nav'=> $argv[1],
        '?id'=> $argv[2]
    );
    le retour dans mon terminal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    [argv] => Array<br />
            (<br />
                [0] => cmd.php<br />
                [1] => module::show<br />
                [2] => 1<br />
            )<br />
    il récupère bien le paramètre que j'ai assigné au tableau, je cherche l'id 1 (qui existe bien en bdd et qui s'affiche dans le navigateur avec le même paramètre). Mais la page n'est pas récupérée j'ai une erreur Undefined index: REQUEST_METHOD.


    merci d'avance.

  5. #5
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    4 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 4 814
    Points : 18 561
    Points
    18 561
    Billets dans le blog
    17

    Par défaut

    Pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $tParam=array(
        ':nav'=> $argv[1],
        '?id'=> $argv[2]
    );
    mais (sans le ?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $tParam=array(
        ':nav'=> $argv[1],
        'id'=> $argv[2]
    );
    c'est un tableau associatif, tout simplement

    vous pouvez egalmeent passer une chaine de parametre json, pour cela, modifier ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $tParam=array();
    $tParam[':nav']=$argv[1];
    
    $tArg=(array)json_decode($argv[2]);
    
    $tParam=array_merge($tParam, $tArg );

    puis un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    php cmd.php default::test '{"id":"2","side":"buy"}
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    février 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : février 2017
    Messages : 9
    Points : 2
    Points
    2

    Par défaut

    Merci pour ces réponses, c'est bien compris.


    Pour ma première question à propos de l'authentification d'un module, comment est ce que je peux l'outre-passer dans l'appel via une cmd ?

  7. #7
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    4 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 4 814
    Points : 18 561
    Points
    18 561
    Billets dans le blog
    17

    Par défaut

    Plusieurs solutions pour votre cas, 2 exactement:

    1. vous créez un module spécial qui sera accessible via votre ligne de commande, où vous appellerez votre code
    2. vous ajoutez dans votre fichier cmd, un fichier de configuration différent qui désactivera la partie authentification

    pour le point 2: vous avez dans cmd.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $oRoot->addConf('../conf/mode.ini.php');
    $oRoot->addConf('../conf/connexion.ini.php');
    $oRoot->addConf('../conf/site.ini.php');
    ajoutez dans votre repertoire conf un fichier cmd.ini.php par exemple
    puis chargez le:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $oRoot->addConf('../conf/mode.ini.php');
    $oRoot->addConf('../conf/connexion.ini.php');
    $oRoot->addConf('../conf/site.ini.php');
    $oRoot->addConf('../conf/cmd.ini.php');
    Et il incluera le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    [auth]
    enabled=0
    ;liste des modules non concerne par l'auth: separe par des virgules
    module.disabled.list=module1,module2,module3
    vous noterez: le enabled à zéro, et la liste des modules à desactiver l'authentification

    ce fichier de config désactivant l'auth ne sera chargé logiquement que par ce fichier cmd.php

    Pour des raisons de sécurité, il faudra dans ce cas ajouter une portion de code dans cmd.php pour confirmer qu'on est bien en ligne de commande et que la personne n'a pas entrer l'adresse monsite.com/cmd.php

    Ajoutez pour cela le code suivant dans cmd.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(false===isset($argv)){
    	die('uniquement valable en ligne de commadne');
    }
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  8. #8
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    février 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : février 2017
    Messages : 9
    Points : 2
    Points
    2

    Par défaut

    Bonjour,

    Merci beaucoup pour tout ça, c'est parfait !

  9. #9
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    4 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 4 814
    Points : 18 561
    Points
    18 561
    Billets dans le blog
    17

    Par défaut

    Clin d'oeil à l'autre discussion

    Le nouveau template disponible "software craftsmanship" simplifiera cette multiplicité d'axe d'appel d'une application (version du framework 4.130

    Avec une classe business regroupant le code métier, on peut avoir à la fois un appel web, webservice ou ligne de commande pour travailler avec ce même code métier
    http://mkframework.com/scraftsmanship.html
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

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

Discussions similaires

  1. Utilisation de services C++ importés
    Par Cheb09 dans le forum Delphi
    Réponses: 8
    Dernier message: 18/06/2007, 21h59
  2. importer une BDD (OSVDB)
    Par Mickael Scofild dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 14/05/2007, 09h02
  3. Problème de caractères lors d'importation de bdd
    Par ferdi67 dans le forum Outils
    Réponses: 1
    Dernier message: 28/08/2006, 22h28
  4. requete d import de BDD
    Par mick84m dans le forum Administration
    Réponses: 4
    Dernier message: 21/03/2006, 16h17

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