CLI : PHP en ligne de commande

PHP n’est pas qu’un langage de script orienté web. Il peut s’utiliser en ligne de commande, ce qui permet de l’utiliser comme un langage de script classique.

Cet article explique :

  • Comment installer CLI sous Windows et Linux.

  • L’utilisation de PHP en ligne de commande et avec des scripts.

Ce qu’il faut savoir :

  • Connaître les bases de PHP.

  • Avoir des notions de l’utilisation des consoles Linux et Windows.

 

PHP est habituellement utilisé pour la création de sites ou de services web, mais CLI (Command-Line Interface qui veut dire interface en ligne de commande en français) permet d’utiliser PHP en ligne de commande dans la console d’un système d’exploitation. PHP CLI a été publié en version expérimentale avec PHP 4.2.0. Depuis, CLI est un outil sûr et très utilisé pour créer des scripts shell (script système). Il est, notamment, très pratique pour automatiser ses sauvegardes de bases de données, interagir avec une application web sans utiliser de navigateur et bien d’autres choses. En couplant CLI à une méthode d’automatisation, vous pourrez gagner un temps considérable. Toutes les possibilités s’offrent alors à vous, vous pouvez tester si un serveur est disponible automatiquement, archiver les messages d’un forum quotidiennement ou encore archiver vos différentes versions de scripts afin de pouvoir éventuellement les restaurer.

Au cours de cet article, nous verrons comment installer PHP CLI sous Windows XP et Linux (l’installation sous les différentes distributions est quasiment identique). Ensuite, nous utiliserons un exemple simple, qui sera détaillé dans la suite de l’article, pour voir les différentes façons d’utiliser CLI. Évidemment, nous ne passerons pas par un navigateur web pour faire cela mais par un script exécuté en ligne de commande.

Notez qu’en utilisant CLI, les scripts sont exécutés jusqu’à ce qu’ils soient terminés, contrairement à l’utilisation avec Apache, qui les stoppe après un certain temps d’exécution (30 secondes par défaut). Faites donc très attention aux boucles infinies qui utiliseraient votre processeur de façon excessive.

Les codes sources des divers fichiers sont disponibles sur mon github : https://github.com/jeremy-rafflin/tutoriel-blog/tree/master/cli

Installation

Pour pouvoir utiliser PHP CLI, vous devez dans un premier temps installer PHP . Ici, je vous propose une installation simple, il suffit de télécharger PHP et ensuite d’utiliser son exécutable (vous verrez comment, un peu plus tard dans l’article).

Installation sous Windows

Rendez-vous à l’url http://www.php.net/downloads.php et télécharger PHP5.x.x zip (prenez la dernière version stable) dans la partie Windows binaries. Ensuite, décompressez l’archive dans le répertoire de votre choix. Je vous conseille toutefois de créer un répertoire à la racine de votre disque dur et d’y décompresser l’archive. Pour l’article, j’ai décompressé l’archive dans c:\cli. L’installation est maintenant terminée. Afin de vérifier qu’elle fonctionne correctement, créez un fichier test.php similaire à celui ci dessous dans c:\cli.

ex1 :

 

Ensuite, ouvrez la console Windows : démarrer ? exécuter ? taper cmd ? ok pour Windows XP et clic droit dans la barre des
tâches => propriétés => Menu démarrer=> personnaliser et cocher la
case « Commande exécuter »
pour Windows Vista et Windows 7. Vous devriez alors voir apparaître une fenêtre console similaire à celle présente ci-dessous (c:\document and setting\rafflin jérémy est le répertoire par défaut dans lequel s’ouvre la console, ici il s’agit de mon répertoire personnel) .

Exécutez désormais cd .. jusqu’à ce que vous soyez dans c:\, tapez désormais cd cli. Exécutez maintenant votre script test.php en tapant php test.php. Vous devriez voir apparaître hello world à l’écran. Si ce n’est pas le cas, recommencez le processus en vous assurant que vous suivez bien les étapes.

 

Installation sous Linux

Pour les utilisateurs qui n’utilisent pas d’environnement graphique, je vous conseille d’aller voir la documentation de votre distribution (l’installation étant différente pour chaque distribution, je ne vais pas les présenter ici car cela serait trop long). Si vous utilisez un environnement graphique, l’installation est similaire à celle sous Windows. Rendez-vous sur la page http://www.php.net/downloads.php et téléchargez la source PHP5.x.x (tar.gz) ou PHP5.x.x (tar.bz2) suivant vos outils de décompression (prenez la dernière version stable).

Une fois l’archive téléchargée, décompressez-la dans le répertoire de votre choix. Pour plus de simplicité, j’ai décompressé l’archive dans /cli (où CLI est un répertoire créé à la racine du disque). Vous obtiendrez alors un dossier php-5.x.x. Changez son nom en php, ainsi si vous changez de version, vous n’aurez pas à modifier tous vos scripts. Votre installation est maintenant terminée. Afin de vérifier que votre installation fonctionne correctement, créez un fichier test.php similaire à celui du l’ex1 dans le répertoire /cli/php. Ouvrez désormais un terminal : Application ? Outils système ? Terminal (cette manipulation peut être différente suivant votre distribution).

Exécutez la commande cd /cli/php afin d’avoir le bon répertoire courant, puis exécutez votre fichier test.php avec la commande php test.php. Vous devriez voir hello world apparaître à l’écran. Si ce n’est pas le cas, recommencez le processus en vous assurant que vous suivez bien les étapes.

 

Simplifier l’appel de script

 

Dans les tests précédents, nous avons créé et exécuté nos fichiers de tests dans le répertoire qui contient l’exécutable PHP. Cela permet d’exécuter les scripts de façon simplifiée. En effet, il faut appeler l’exécutable présent dans le répertoire CLI pour exécuter nos scripts. Par exemple, si vous désirez exécuter un script toto.php présent dans c:\www sous Windows ou dans /var/www sous Linux alors que votre répertoire courant est un répertoire quelconque, vous devez exécuter :

  • Sous Windows – c:\cli\php c:\www\toto.php (n’oubliez pas l’espace entre c:\cli\php et c:\www\toto.php).
  • Sous Linux – /cli/php /var/www/toto.php (n’oubliez pas l’espace entre /cli/php et /var/www/toto.php).

L’exécution de scripts est alors fastidieuse. Il est heureusement possible d’accéder à l’exécutable PHP en tapant simplement php dans la console.

Sous Windows, vous devez ajouter le chemin de l’exécutable PHP à la variable Path. La variable Path contient les chemins des emplacements des commandes DOS, ce qui permet d’appeler une commande sans utiliser son chemin absolu. Pour ajouter le chemin à la variable Path, procédez ainsi : clic droit sur poste de travail ? propriétés ? onglet avancé ? bouton variable d’environnement ? sélectionnez la variable Path ? bouton modifier ? et ajoutez le chemin vers l’exécutable PHP précédé par un point virgule (dans l’article ;c:\cli).

Sous Linux, nous allons utiliser le Shebang. Le Shebang est la première ligne d’un script sous Linux, elle doit obligatoirement commencer par #!, le caractère # doit être en première ligne et en première colonne. Le Shebang permet d’indiquer au shell quel interpréteur doit être utilisé pour le fichier (l’interpréteur doit être indiqué en chemin absolu). Dans l’exemple de l’article, la première ligne sera donc #!/cli/php. En écrivant cette ligne au début de chacun de vos scripts, vous n’aurez plus qu’à taper php /var/www/toto.php pour exécuter toto.php.

 

Application exemple

 

Maintenant que vous savez comment installer CLI et exécuter des scripts PHP en ligne de commande, nous allons voir comment créer des scripts pouvant prendre des arguments ou utilisant le terminal comme entrée d’informations.

L’application qui va être utilisée pour l’exemple est un stockage d’informations via fichier CSV. CSV est un format de fichier ou les données sont différenciées à l’aide d’un séparateur, en général une virgule (si vous connaissez mal ce format, vous pouvez vous renseigner sur la page internet http://fr.wikipedia.org/wiki/Comma-separated_values). L’ex2 vous présente le fichier livre.csv qui sera utilisé dans l’application exemple. Les différentes informations correspondent au schéma : titre du livre,auteur,public visé. Évidemment, ces informations ne sont pas suffisantes pour répertorier un livre mais cela suffira pour présenter correctement l’utilisation de PHP avec CLI.

ex2 : Contenu du fichier livre.csv

CLI étant plus utilisé sous Linux que sous Windows, j’exécuterai les scripts sous Linux pour la suite de l’article. Les exemples fonctionnent également sous Windows, seuls leurs appels diffèrent (voir les sections précédentes).

 

 Récupérer les arguments d’un script shell

La plupart des commandes shell prennent des arguments, CLI permet de faire la même chose avec des scripts PHP. Créez un fichier argument.php contenant le code présent dans l’ex3. La variable $argv est un tableau créé par PHP qui contient les arguments passés au script.

Listing 3. Contenu du fichier argument.php

J’ai créé ce fichier dans mon répertoire courant, ce qui me permet de l’exécuter avec la commande php argument.php. Exécutez maintenant ce script avec des arguments, par exemple : php argument.php toto tata ‘argument 4’ argument 5. Vous devriez obtenir quelque chose de similaire à l’image ci-dessous. En observant ce résultat vous pouvez remarquer que le premier argument du script est le nom du script lui-même. Les différents arguments doivent être séparés par des espaces, donc si vous souhaitez passer des arguments qui contiennent des espaces, vous devez les mettre entre guillemets. Ainsi le troisième argument du script sera contenu dans $argv[3] (ici, la valeur sera tata).

Une autre variable est également disponible, il s’agit de $argc qui contient le nombre d’arguments passés au script.

 

 

 

Reprenons notre application pour créer un script plus concret. Nous allons créer un script permettant d’ajouter un livre à notre fichier CSV. Ce script prendra comme argument le titre du livre, le nom de l’auteur et le public visé. Ce script doit donc compter quatre arguments (nom du script compris). L’exg 4 est le script en question. Il contient en première partie un test qui permet de vérifier si l’on passe le bon nombre d’arguments au script. La seconde partie récupère les paramètres du script et les insère dans un tableau. Vient ensuite la lecture du fichier livre.csv pour mettre son contenu dans le tableau $info afin de pouvoir le réécrire par la suite. La dernière partie du script ouvre le fichier livre.csv en écriture, y insère le contenu qui était déjà dans le fichier avant l’exécution du script, puis insère les données fournies en paramètre au script. Notez que \n permet d’effectuer une mise à la ligne.

ex4 . Contenu du fichier add_livre.php

Vous pouvez désormais ajouter un livre au fichier livre.csv en exécutant le script avec trois arguments (exemple : php add_livre.php titre du livre auteur du livre public visé).

Utilisation de l’entrée standard STDIN

STDIN est l’entrée standard, elle permet d’interagir avec l’utilisateur. L’ex 5 montre comment se servir de STDIN en récupérant ce que l’utilisateur entre au clavier et l’affiche. Lorsque le script arrive à la ligne contenant $val = trim(fgets(STDIN)), le script s’arrête jusqu’à ce que l’utilisateur appuie sur la touche ENTREE. Ensuite, le script reprend. Trim() permet de supprimer les espaces inutiles en début et en fin de chaîne de caractères.

 

ex5. Exemple de l’utilisation de STDIN

Afin de mettre en avant les possibilités qu’offre STDIN, nous allons étudier le script modif_livre.php présent dans l’ex6. La première partie permet de lire les données présentes dans le fichier et de les insérer dans un tableau. Cela permettra de les traiter par la suite. Ensuite, le script affiche les données présentes dans le tableau, avec une information supplémentaire, qui est un ID permettant à l’utilisateur de choisir le livre à modifier. Une fois que l’utilisateur a saisi un ID, il peut modifier une par une chaque information du livre qu’il souhaite modifier. Pour finir, le script enregistre toutes les informations dans le fichier.

Listing 6. Contenu du fichier modif_livre.php

 

Automatisation des taches

 

Maintenant que vous savez créer des scripts système grâce à PHP, vous allez voir comment automatiser l’exécution de ceux-ci. Pour cette partie, vous devez avoir effectué les instructions permettant de simplifier l’appel des scripts, c’est-à-dire que vous devez pouvoir exécuter vos scripts en tapant php monScript.php.

Sous Windows

Sous Windows, vous devez dans un premier temps créer un fichier Batch qui permet de lancer une ou plusieurs commandes DOS en l’exécutant. Une fois les actions effectuées la console se ferme. Ce type de fichier contient une instruction par ligne et son extension est ‘.bat’. Un exemple valant mieux qu’un long discours, nous allons modifier le script test.php qui est présenté en début d’article en y ajoutant une boucle infinie. Ainsi vous pourrez voir l’exécution de votre script de test car si l’on n’ajoute pas de boucle infinie, la console se fermera après l’exécution du script et vous n’aurez pas le temps de voir son exécution. Votre script test.php doit désormais ressembler à celui de l’ex7.

 

ex7. Contenu du fichier test.php

 

Créez un fichier texte et renommez-le en lancerTest.bat. Modifiez son contenu (clic droit sur le fichier puis modifier) afin d’y insérer la commande permettant d’exécuter le script test.php (normalement php c:\cli\test.php). Maintenant que votre fichier batch est créé, exécutez-le en double cliquant dessus. Vous devriez voir apparaître une console similaire à celle ci-dessous.

 

Pour stopper le script infini, faites ctrl + c. Maintenant que nous avons créé de quoi exécuter notre script, nous allons automatiser l’appel de ce script. Pour cela ouvrez le planificateur de tâches Windows (Panneau de configuration ? Tâches planifiées). Une fois le planificateur ouvert, cliquez sur création d’une tâche planifiée, une fenêtre s’ouvre alors. Cliquez sur suivant, vous voyez alors les exécutables pré-enregistrés de votre système. Cliquez sur Parcourir et sélectionnez votre fichier lancerTest.bat. Vous pouvez alors choisir la fréquence d’exécution de votre script. Choisissez maintenant pour quel utilisateur doit s’effectuer la tâche puis cliquez sur suivant. Vous pouvez terminer la planification de votre tâche ou ouvrir le planificateur avancé. Celui-ci permet de paramétrer l’exécution de façon plus précise, par exemple en l’exécutant par intervalle régulier ou encore en répétant la tâche toutes les X minutes. Je vous laisse découvrir le planificateur avancé, celui-ci permet de nombreux réglages, je vous conseille donc d’étudier ces possibilités.

 

Sous Linux

 

Sous Linux, il existe un service appelé Cron permettant d’exécuter des tâches à intervalle régulier. Cron est disponible sur toutes les distributions Unix/Linux. Je ne vais pas vous détailler Cron à 100% car cela serait une recopie de la documentation mais je vais expliquer les bases permettant d’automatiser l’appel de scripts (pour plus de renseignements je vous conseille : http://doc.fedora-fr.org/wiki/CRON_:_Configuration_de_t%C3%A2ches_automatis%C3%A9es ). Pour une utilisation optimale, vous devez être connecté en tant qu’administrateur du système (root en général).

Les fichiers au format Crontab sont utilisés pour configurer l’appel de scripts. Les fichiers de ce format sont constitués de sept champs paramétrables : minute(1) heure(2) jour(mois)(3) mois(4) jour(semaine)(5) utilisateur(6) commande(7) .

  • (1) valeur comprise entre 0 et 59,
  • (2) valeur comprise entre 0 et 23,
  • (3) valeur comprise entre 1 et 31,
  • (4) valeur comprise entre 1 et 12,
  • (5) valeur comprise entre 0 et 7 (Dimanche étant le 0 ou le 7) ou alors les abréviations correspondant aux jours de la semaine en Anglais: sun,mon,tue,wed,thur,fri,sat,
  • (6) uniquement pour les fichiers crontab du système dans /etc/cron.d,
  • (7) commande à effectuer .

Il existe également des caractères spéciaux :

  • * : s’il est utilisé dans l’un des cinq premiers champs, indique que la commande doit être effectuée tout le temps,
  • / : permet de spécifier une répétition,
  • – : permet de définir une plage,
  • , : permet de définir plusieurs valeurs.

Voici une liste de commandes bash permettant de gérer vos fichiers crontab :

  • crontab -l permet de lister toutes les actions crontab de votre utilisateur.
  • crontab -u toto -l permet à l’administrateur de lister toutes les actions crontab de l’utilisateur toto.
  • crontab -r permet de supprimer votre fichier crontab.
  • crontab -e permet d’éditer votre fichier crontab. Cela ouvrira l’éditeur de texte standard vi. Si vous ne savez pas utiliser vi, rendez-vous à l’adresse http://doc.fedora-fr.org/wiki/Utilisation_de_vi#Commandes_diverses .

Maintenant que nous avons toutes les clés en main, prenons comme exemple un script mkdir.php qui crée un dossier dans votre répertoire personnel (/root). L’ex8 contient le code permettant de faire cela. N’oubliez surtout pas le shebang qui permet d’indiquer quel interpréteur doit être utilisé.

 

ex8. Script mkdir.php permettant de créer un répertoire

Maintenant que notre script est créé, nous allons l’appeler toutes les minutes (évidemment faire cela n’a strictement aucun intérêt, mais cela permet de tester crontab). Editez votre fichier crontab (tapez crontab -l dans votre terminal) et inserez y */1 * * * * * /chemin_du_fichier/test.php. Pour quitter le fichier ouvert avec vi, faites echap ? :wq ? entrer. Patientez maintenant une minute et ouvrez votre répertoire personnel (/root), vous devriez alors voir aparaître le répertoir titi.

 

PS : Les codes sources des divers fichiers sont disponibles sur mon github : https://github.com/jeremy-rafflin/tutoriel-blog/tree/master/cli

 

Conclusion

Vous avez désormais toutes les informations dont vous avez besoin pour créer des applications en ligne de commande et automatiser différentes taches récurrentes. Cela vous facilitera la vie pour effectuer diverses tâches telles que la sauvegarde de bases de données, la sauvegarde de fichiers, la vérification de la disponibilité d’un serveur

 

Sur internet

 

 

 

 

 

 

 

 

 

 

 

Tags:,
Un commentaire

Ajouter un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *