Shell Interactif
Le CLI SAPI fournit un shell intéractif lors de l'utilisation
de l'option -a si PHP a été compilé avec l'option --with-readline.
Depuis PHP 7.1.0 le shell intéractif est également disponible sur Windows,
si l'extension readline est activée.
En utilisant le shell interactif, vous avez la possibilité de taper du code PHP
et qu'il soit exécuté directement.
Exemple #1 Exécution de code en utilisant le shell interactif
$ php -a
Interactive shell
php > echo 5+8;
13
php > function addTwo($n)
php > {
php { return $n + 2;
php { }
php > var_dump(addtwo(2));
int(4)
php >
Le shell interactif fournit également une autocomplétion des fonctions,
des constantes, des noms de classes, des variables, des appels aux méthodes
statiques et des constantes de classes en utilisant la touche de tabulation.
Exemple #2 Auto-complétion en utilisant la touche de tabulation
Le fait de presser deux fois la touche de tabulation lorsqu'il y a plusieurs
complétions possibles affichera une liste de ces complétions :
php > strp[TAB][TAB]
strpbrk strpos strptime
php > strp
Lorsqu'il n'y a qu'une seule complétion possible, presser la touche de tabulation
une seule fois complétera le reste sur la même ligne :
La complétion fonctionnera aussi pour les noms qui ont été définis lors
de la session courante du shell interactif :
php > $fooThisIsAReallyLongVariableName = 42;
php > $foo[TAB]ThisIsAReallyLongVariableName
Le shell interactif stocke votre historique et peut y accéder en utilisant les touches
haut et bas. L'historique est sauvegardé dans le fichier ~/.php_history.
Le CLI SAPI fournit 2 directives du php.ini :
cli.pager
et cli.prompt
.
La directive cli.pager
permet la définition d'un programme
externe (comme less) à utiliser comme pager pour la sortie
au lieu d'afficher directement sur l'écran. La directive
cli.prompt
autorise la modification du prompte
php >
.
Il est également possible de définir des directives du php.ini
dans un shell interactif en utilisant des notations raccourcies.
Exemple #3 Définition de directives du php.ini dans un shell interactif
La définition de la directive cli.prompt
:
php > #cli.prompt=hello world :>
hello world :>
En utilisant des backticks, il est possible d'exécuter du code PHP
dans le prompte :
php > #cli.prompt=`echo date('H:i:s');` php >
15:49:35 php > echo 'hi';
hi
15:49:43 php > sleep(2);
15:49:45 php >
Définition du pager à less :
php > #cli.pager=less
php > phpinfo();
(sortie affichée avec less)
php >
La directive cli.prompt
supporte quelques séquences d'échappements :
Séquences d'échappements de cli.prompt
Séquence : |
Description : |
\e |
utilisé pour ajouter des couleurs au prompte. Exemple :
\e[032m\v \e[031m\b \e[34m\> \e[0m
|
\v |
La version de PHP. |
\b |
Indique dans quel bloc de PHP nous nous trouvons.
Par exemple, /* permet d'indiquer que nous
sommes dans un commentaire multilignes. Le scope externe est représenté
par php .
|
\> |
Indique le caractère utilisé pour le prompte. Par défaut, ce sera
> , mais peut être modifié lorsque le shell se
trouve dans un bloc indéterminé ou dans une chaîne de caractères.
Les caractères possibles sont : ' " {
( >
|
Note:
Les fichiers inclus via auto_prepend_file et auto_append_file sont analysés
dans ce mode, mais avec quelques restrictions - i.e. les fonctions
doivent avoir été définies avant l'appel.
Interactive mode
Si l'extension readline n'est pas disponible, antérieur à PHP 8.1.0,
invoquer le CLI SAPI avec l'option -a fournit le mode intéractif.
Dans ce mode, un script PHP complet est supposé d'être donnée via STDIN,
et après l'interruption
avec
CTRL
+D
(POSIX) ou
CTRL
+Z
suivi de ENTER
(Windows), ce script sera évalué.
Ceci est basiquement identique à invoquer le CLI SAPI sans l'option -a.
À partir de PHP 8.1.0, invoquer le CLI SAPI avec l'option -a
échoue, si l'extension readline n'est pas disponible.