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 :

Exécution fichier par les paramètres dans une fonction


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut Exécution fichier par les paramètres dans une fonction
    Bonjour,

    J'ai le code suivant qui marche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if (PHP_SAPI === 'cli') {
        $firstName = $argv[1];
        $lastName = $argv[2];
    }
    else {
        $firstName = $_GET['firstName'];
        $lastName = $_GET['lastName'];
    }
     
    echo 'sans fonction :::  1er Paramètre  : ' . $firstName . PHP_EOL . ' 2e Paramètre  : ' . $lastName;
    En fait, pour exécuter mon fichier, il y a deux paramètres : firstName et lastName.

    Si je l'exécute par la commande CMD :
    php test.php Patrick Dupont
    et j'obtiens :
    sans fonction ::: 1er Paramètre : Patrick
    2e Paramètre : Dupont
    Si je l'exécute dans un navigateur
    et j'obtiens la même chose :
    sans fonction ::: 1er Paramètre : Nathalie
    2e Paramètre : Boupont
    J'ai voulu mettre dans une fonction pour diminuer le code et l'utiliser dans les autres fichiers.

    Voici ma solution qui marche aussi :
    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
    function getparametersArguments($argvArry = NULL, $paramArry = NULL){
        if (PHP_SAPI === 'cli') {
            $firstName = $argvArry[0];
            $lastName = $argvArry[1];
        }
        else {
            $firstName = $paramArry[0];
            $lastName = $paramArry[1];
        }
        return PHP_EOL . 'avec une fonction :  1er Paramètre  : '  . $firstName . PHP_EOL . ' 2e Paramètre   : ' . $lastName;
    }
     
     
    if (isset($argv[1])) {
        $argvArry = [
            $argv[1], $argv[2],
        ];
     
        echo PHP_EOL . getparametersArguments($argvArry, $paramArry = NULL);
    }
    else {
        $paramArry = [
            $_GET['firstName'], $_GET['lastName'],
        ];
        echo PHP_EOL . getparametersArguments($argvArry = NULL, $paramArry);
    }
    Mais comme vous voyez, c'est encore plus long que la 1re version.
    Est-ce que vous pouvez m'aider pour faire une fonction plus épurée et le faire autrement.

    Merci

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Plus long, plus long, faut pas charrier. ;-)

    L'intérêt d'une fonction c'est permet de factoriser le code et de le rendre plus lisible. C'est intéressant même si ce n'est utilisé qu'une fois par fichier du moment que tu utilises un include pour l'utiliser dans un script.
    En effet si tu mets le code de la fonction dans chaque script, ça n'a aucun intérêt puisque si tu modifies la fonction il faudra la modifier dans chaque.

    Après. Comme $_GET est superglobale tu peux faire de la manière suivante :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function getparametersArguments($argvArry = NULL){
        if (PHP_SAPI === 'cli') {
            $firstName = $argvArry[0];
            $lastName = $argvArry[1];
        }
        else 
    {
            $firstName = $_GET['firstName'];
            $lastName = $_GET['lastName'];
        }
        return PHP_EOL . 'avec une fonction :  1er Paramètre  : '  . $firstName . PHP_EOL . ' 2e Paramètre   : ' . $lastName;
    }

    Si tu veux vraiment moins de code tu peux faire comme suit :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    function getparametersArguments($argvArry = NULL){
     
     $firstName = (PHP_SAPI === 'cli') ? $argvArry[0] : $_GET['firstName'];
     $lastName  = (PHP_SAPI === 'cli') ? $argvArry[1] : $_GET['lastName'];
        return PHP_EOL . 'avec une fonction :  1er Paramètre  : '  . $firstName . PHP_EOL . ' 2e Paramètre   : ' . $lastName;
    }

    Enfin vu ce que fait la fonction, je trouve que le nom est mal choisi car on s'attend à avoir une fonction qui renvoie n'importe quels paramètre alors qu'elle ne traite qu'un nom et un prénom.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  3. #3
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Plus court.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function getparametersArguments($argvArry = NULL){
     
     list($firstName, $lastName) = (PHP_SAPI == 'cli') ? $argvArry : [$_GET['firstName'], $_GET['lastName']];
        return PHP_EOL . 'avec une fonction :  1er Paramètre  : '  . $firstName . PHP_EOL . ' 2e Paramètre   : ' . $lastName;
    }
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    une autre façon de faire serait de découper le code en plusieurs parties :
    1. récupération des données
    2. traitement des données
    3. affichage du résultat


    dans votre exemple, il n'y a pas beaucoup de traitement donc on pourrait grouper le traitement et l'affichage comme cela :
    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
    // récupération des données
     
    if (isset($argv)) {
     
    	$parametres = [
    		"firstName" => $argv[1],
    		"lastName" => $argv[2],
    	];
     
    } else {
     
    	$parametres = $_GET;
     
    }
     
     
    // traitement des données et affichage
     
    echo "1er paramètre : {$parametres["firstName"]}" . PHP_EOL;
    echo "2e paramètre : {$parametres["lastName"]}" . PHP_EOL;

  5. #5
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut
    Grand merci Mathieu .
    J'aimerais bien mettre dans une fonction comme Badaze dit
    Citation Envoyé par badaze Voir le message
    L'intérêt d'une fonction c'est permet de factoriser le code et de le rendre plus lisible. C'est intéressant même si ce n'est utilisé qu'une fois par fichier du moment que tu utilises un include pour l'utiliser dans un script.
    En effet si tu mets le code de la fonction dans chaque script, ça n'a aucun intérêt puisque si tu modifies la fonction il faudra la modifier dans chaque.
    (merci également à Badaze)
    Voici mon essai :
    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
    function findTwoParametersArguments($argv = NULL){
        // récupération des données
        if (isset($argv)) {
     
            $NewParametres = [
                "firstName" => $argv[1], "lastName" => $argv[2],
            ];
     
        } else {
     
            $NewParametres = $_GET;
     
        }
     
        // traitement des données et affichage
        //return PHP_EOL . 'voici les paramètres trouvés :  ' . PHP_EOL. ' 1er Paramètre  : '  . $NewParametres["firstName"] . PHP_EOL . ' 2e Paramètre   : ' . $NewParametres["lastName"];
        echo PHP_EOL . 'voici les paramètres trouvés :  ' . PHP_EOL. ' 1er Paramètre  : '  . $NewParametres["firstName"] . PHP_EOL . ' 2e Paramètre   : ' . $NewParametres["lastName"];
     
    }
     
    //echo findTwoParametersArguments();
    findTwoParametersArguments();
    Dans un navigateur, cela marche, mais pas dans une commande CMD.
    Puisqu’index de firstName et lastName n'est pas définis.

    Est ce qu'il y a une solution ou bien...

    Merci

  6. #6
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Quel est l'intérêt de vouloir faire fonctionner le script en mode ligne de commande ?
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  7. #7
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut
    Bonjour, parce qu'il y a deux choses :
    1. Le script va exécuter par une tache planifiée
    2. On peut aussi déclencher manuellement par web.



    C'est pour cela que je voudrais qu'il fonctionne bien en 2 modes.

    Merci

  8. #8
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    pour la tâche planifiée, vous pouvez très bien utiliser la page web en lançant une commande comme "curl -I http://127.0.0.1/test.php..."

  9. #9
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut
    Oui c'est une solution, mais il faudrait un batch file pour cela...

    'curl' n’est pas reconnu en tant que commande interne
    ou externe, un programme exécutable ou un fichier de commandes.
    Donc j'aimerais bien trouver une solution. En fait votre solution (celle de Mathieu) marche très bien.
    Je l'utilise pour le moment, mais je me demande si on peut la mettre tout ensemble dans une autre fonction : // récupération des données + // traitement des données et affichage


    Merci et bon week-end

  10. #10
    Membre habitué
    Homme Profil pro
    Aprenti
    Inscrit en
    Mai 2015
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Aprenti

    Informations forums :
    Inscription : Mai 2015
    Messages : 199
    Points : 140
    Points
    140
    Par défaut
    ok, j'ai compris qu'il n'y a pas d'autre solution.

    Merci

  11. #11
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par tonton.odilon Voir le message
    Bonjour, parce qu'il y a deux choses :
    1. Le script va exécuter par une tache planifiée
    2. On peut aussi déclencher manuellement par web.



    C'est pour cela que je voudrais qu'il fonctionne bien en 2 modes.

    Merci
    Dans les 2 cas, il ne fait que de l'affichage ?
    Alors j'aurais tendance à procéder ainsi :

    Ton script PHP gère les echos...

    Donc ça marche en client web apache direct.

    Tu poses sur ton serveur un shell qui dit à peu près ça, cette fois pour ton PHP cli.

    php mon_script.php?nom=dupont&prenom=sophie>>mes_logs.txt

    Et tu retrouveras tes mêmes "echo" dans ton fichier log.

    A moins que je n'aie pas compris un truc, je ne vois pas bien l'intérêt de faire afficher des trucs par un cron si ce n'est pas pour les conserver ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

Discussions similaires

  1. Struct dans les paramètres d'une fonction
    Par qdaemon_fr dans le forum C
    Réponses: 3
    Dernier message: 20/04/2011, 14h41
  2. ArrayList initialisation dans les paramètres d'une fonction
    Par Mageni dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 15/02/2010, 10h54
  3. Réponses: 6
    Dernier message: 31/05/2008, 15h45
  4. Connaitre par une requête les paramètres d'une fonction
    Par katoyi dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/05/2008, 20h00
  5. Réponses: 2
    Dernier message: 29/08/2007, 19h43

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