Annonce

Réduire
Aucune annonce.

[PHP-CLI] : PHP dans votre console #1

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • [PHP-CLI] : PHP dans votre console #1

    Bonjour,


    Je n'ai pas trouvé de sujet similaire sur le forum, alors je le poste ici.

    Php est un langage majoritairement utilisé pour la création de sites web, derrière un Apache/Nginx ou autre pour relayer les résultats, mais il se trouve qu'il fonctionne aussi en console (cli).

    Au niveau des performances, on est en dessous de Python est Ruby il me semble, mais je ne serais pas dire de combien (x2 pour un Python non compilé de mémoire), encore qu'il reste à voir si une utilisation de HHVM au lieu de php lui même n’accélérais pas le tout (si plusieurs lancements du script de prévus).

    Quels en sont donc les avantages?

    Premièrement ça permet à nous codeurs php de ne pas devoir apprendre le Python qui est si horrible au niveau de la syntaxe (), et de profiter de toutes les fonctionnalités que nous offre php depuis la version 5.3 et 5.5 qui l'ont rendu beaucoup plus adapté aux gros projets (namespaces notamment).

    On pourra avoir accès a un très large panel de librairies dont dispose php pour le web (via composer par exemple), ou bien à des librairies plus inconnues comment PHP-GTK ou PHP-Qt pour des interfaces graphiques.


    Si vous êtes sous windows, ça ne sera pas vraiment adapté mais vous pourrez tout de même suivre ce tutoriel, avec un petit script batch ça devrais le faire ou alors une variable d'environnement pour php.

    Vous n'aurez bien évidemment pas de variables $_GET, $_POST ou $_UPLOAD !(et toutes les variables du genre en fait).


    I - La découverte :


    On ouvre un nouveau fichier PHP - main.php.

    Pour afficher des choses à l'écran vous pouvez utiliser les fonctions habituelles : echo,print_r,etc.

    Par contre, la récupération de la saisie utilisateur va poser "problème" (pas longtemps cela dit). Elle se trouve à l'adresse php://STDIN, et avec le diminutif STDIN.
    Comment la récupérer ? Avec un simple fgets(STDIN).

    Code PHP:
    <?php
    echo "Quel est votre nom : \n";
    $nom fgets(STDIN);
    echo 
    "Votre nom est {$nom} !";
    Qui nous affichera la saisie utilisateur.

    Mais voilà, petit problème...si vous avez rentré int80h comme nom il va stocker dans la variable $nom "int80h\n". Un magnifique retour à la ligne est entré dans notre variable...Comment le supprimer ? Je propose un bête trim($nom,"\n");.
    Comme php n'est pas explicitement typé, on s'en fout totalement de récupérer des strings, on pourra les cast très simplement avec un (int) devant la variable si l'on veut un entier. (oui c'est dégueulasse mais pratique).

    Je propose de faire une petite class statique pour pouvoir réutilisé tout ça...

    class/console.class.php -
    Code PHP:
    <?php

    class Console {
        
        public static function 
    readLine(){

            return 
    trim(fgets(STDIN),"\n");
        }

        public static function 
    writeLine($input){

            return 
    console::write($input."\n");
        }

        public static function 
    write($input){

            return 
    fwrite(STDOUT,$input,strlen($input));
        }

        
    }
    Je ne vais pas tout expliqué, mais j'ai choisi de nommer mes fonction comme en C#, et avec un camelCase (parce que c'est plus beau !).
    J'ai directement trim() mon entrée utilisateur.

    Les valeurs de retour de write et donc de writeLine sont le nombre de bytes écris dans l'entrée standard.

    II - Des arguments, je veux des arguments !

    C'est bien beau de savoir lire et écrire, mais on aimerais aussi savoir récupérer les arguments passés via la ligne de commande.

    $ php main.php arg1 arg2 arg3

    Pour cela rien de plus simple !

    Dans une variable $argc nous aurons le nombre d'arguments passés à php et dans $argv nous aurons un array de toutes les arguments

    Pour les affichers rien de plus simple.

    Code PHP:
    <?php

    print_r
    ($argc);
    print_r($argv);
    Ce qui nous donne pour la commande du dessus :
    4Array
    (
    [0] => main.php
    [1] => arg1
    [2] => arg2
    [3] => arg3
    )
    4 c'est le nombre d'arguments passé, et ensuite nous avons le nom du script, puis les arguments divers !


    Voilà pour cette introduction ! Rien de sorcicer, mais ça permet d'appréhender la chose qui n'est pas si courant que ça

    EDIT:

    Un petit exemple : récupération d'une page web

    Code PHP:
    <?php
    require 'console.class.php';

    $adresse $argv[1];
    $page file_get_contents($adresse);

    if(
    $page){
        if(
    file_put_contents(time(), $page)){

            
    console::writeLine('Bien enregistré !');
        }else{

            
    console::writeLine('Erreur lors de l\'enregistrement !');
        }
    }else{

        
    console::writeLine('Adresse '.$adresse.' introuvable.');

    }

    ?>
    Usage : $ php main.php adresseDuFichier

    L'exemple est bien sûr débile, curl/wGet fait mieux le job mais ça illustre les concepts vus plus haut
    Dernière modification par int80h, 19 février 2015, 20h10.
Chargement...
X