Télécharger
cli.class.php (version : 1.0.2)
Dimanche 29 Novembre 2020 par Loïc Doumerc

Le principe du PHP-CLI (Command-Line Interface) est de pouvoir utiliser PHP en dehors d'un serveur web et surtout en mode console.
Pratique pour créer un deamon ou un script plus rapide à développer en PHP que dans un autre langage.

Les prérequis

  1. Installer PHP (déjà installé si vous avez un serveur web de test)
  2. Avoir inclus le dossier PHP dans les variables d'environnement
  3. Un script à éxécuter ;)

Inclure PHP dans les variables d'environnement

 

Les méthodes

cmd_print

Affiche du texte dans la console

Description

cmd_print(string $string[, string $align = 'L'[, boolean $ligne_temporaire = FALSE]]) : void

Liste de paramètres

$string

Chaîne de caractère à afficher dans la console.

$align

Alignement du texte dans la console.

Option Description Type
LEFT, L Valeur par défaut
Alignement à gauche, insensible à la case.
string
RIGHT, R Alignement à droite, insensible à la case. string
CENTER, C, MIDDLE Alignement centré, insensible à la case. string

$ligne_temporaire

Boolean pour assigner une ligne qui ne reste pas à l'affichage.

cmd_rprint

Raccourci vers cmd_print pour un affichage d'une ligne qui ne reste pas l'affichage.

Description

cmd_rprint(string $string[,string $align = 'L']) : void

cmd_item

Raccourci vers cmd_print pour un affichage d'une ligne ‘‘item’’.

Description

cmd_item(string $string) : void

read

Retourne ce que l'utilisateur renseigne dans la console.

Description

read() : mixed

 

Les fichiers

cli.class.php

<?php
/*********************************************************
 *	Fichier : cli.class.php
 *	Début du projet : 13 avril 2012 18h12
 *	Modification : 16 novembre 2020 22h53
 *
 *		Une création de Loïc Doumerc www.loicdoumerc.fr
 *********************************************************/


class cli
{
	public $ligne_nb_char = 60;

	private $ligne_temporaire = false;
	private $trait = "="; 	


	private function findeligne()
	{
		if($this->ligne_temporaire == true  )
		{
			echo "\r";//On se remet en debut de ligne
			echo str_pad('', $this->ligne_nb_char, ' ', STR_PAD_LEFT);//On complete d'espace vide (effacement)
			echo "\r";//et on revient au debut de ligne

			$this->ligne_temporaire = false;
		}
		else
		{
			echo "\n";
		}
	}

	private function escape($string)
	{
		//On efface tout ce qui n'est pas affichable
		//En gros on garde pas tout ce qui est en dehors de la plage !-Z + les espace et tabulation, voir tableau ASCII
		return preg_replace ( '#[^!-Z[:blank:]]#im' , '' , $string);
	}

	public function cmd_print($string, $align = 'L', $ligne_temporaire = false)
	{
		$this->findeligne();
		$this->ligne_temporaire = $ligne_temporaire;

		$string = $this->escape($string);

		switch( strtoupper($align) )
		{
		case "R":
		case "RIGHT":
			echo str_pad($string, $this->ligne_nb_char, ' ', STR_PAD_LEFT);
		break;

		case "C":
		case "CENTER":
		case "MIDDLE":
			echo str_pad($string, $this->ligne_nb_char, ' ', STR_PAD_BOTH);
		break;

		case "L":
		case "LEFT":
		default:
			echo $string;
		}
	}

	public function cmd_rprint($string,$align = 'L')
	{
		$this->cmd_print($string, $align, true);
	}


	public function cmd_item($string)
	{
		$this->cmd_print('		-> ' . $string, 'L');
	}	
	
	public function hr()
	{
		$this->findeligne();
		echo str_pad('', $this->ligne_nb_char, $this->trait);
	}
	
	public function read()
	{
		$this->ligne_temporaire = true;
		return trim(@fgets(STDIN));
	}

	public function beep(){echo chr(7);}

	public function end()
	{
		$this->findeligne();
		$this->findeligne();
		$this->findeligne();

		$this->cmd_print('Une creation Loic Doumerc');
		$this->cmd_print('Appuyer sur entree pour quitter le script');
		$this->read();//Pour forcer la personne à faire une action
	}
} 

La commande de lancement .bat ou .sh

Il permet de lancer le script

php exemple.php

exemple.php

<?php
require_once('cli.class.php');
$cli = new cli();
$cli->ligne_nb_char = 60;//Par défaut 60, ligne optionelle

$cli->hr();//Fait une séparation
$cli->cmd_print('SERVEUR', 'C');//Affiche un texte centré
$cli->hr();

for($i =0; $i < 256 ; $i++)
{
	$cli->cmd_rprint('Iteration '.$i . '   ' . chr($i),'C');//Ligne autoeffacable centrée
	usleep(50000);//Petite pause pour pouvoir avoir le temps de voir les iterations
}

$cli->cmd_print('Vous etes ?');
		$cli->cmd_item('[1] Un homme');
		$cli->cmd_item('[2] Une femme');
		$cli->cmd_item('[3] Je ne sais pas');

$cli->cmd_print('Votre choix : ');
if( $cli->read() == 3)
{
	$cli->cmd_print('Je pense que vous etes perdu :)');
}

$cli->hr();
$cli->beep();//Emet un beep
$cli->end();

À propos

Je suis développeur semi-professionnel depuis près de 20 ans.
Principalement dans le milieu web. J'aime particulièrement tout ce qui est protocole réseau.

Toutes mes classes