Utiliser PHP en ligne de commandeUtilisation des lignes de commandeIntroduction
Le but premier de &cli.sapi; est le développement
d'applications shell avec PHP. Les différences entre le &cli.sapi;
et les autres SAPI sont
expliquées dans ce chapitre. Il est important de mentionner que &cli;
et CGI sont des SAPI différents malgré
le fait qu'ils puissent partager la majeure partie de leurs comportements.
Le &cli.sapi; est activé par défaut en utilisant l'option
, mais il est possible de le désactiver
en utilisant l'option
lors de l'exécution de la commande ./configure.
Le nom, l'emplacement et l'existence des binaires &cli;/CGI
vont dépendre de la façon dont PHP est installé sur le système. Par
défaut, en exécutant make, les deux binaires CGI
et &cli; sont compilés et nommés respectivement sapi/cgi/php-cgi et
sapi/cli/php dans le répertoire source PHP. On
remarquera que les deux se nomment php. Ce qui se passe
ensuite pendant le make install dépend de la ligne
de configuration. Si un module SAPI, apxs par exemple, a été choisi pendant la
configuration, ou que l'option a été
activée, le &cli; est copié dans {PREFIX}/bin/php pendant
le make install sinon, le CGI sera placé ici.
Si, par exemple, figure dans la
ligne de configuration, le &cli; est copié dans {PREFIX}/bin/php
pendant le make install. Pour forcer l'installation du
binaire CGI, lancez make install-cli
après le make install. Sinon, il est aussi possible de spécifier
dans la ligne de configuration.
Du fait que les deux options et
sont activées par défaut, avoir simplement
dans la ligne de configuration
n'implique pas nécessairement que le CLI soit renommé en
{PREFIX}/bin/php pendant le make install.
Le binaire &cli; est distribué dans le dossier principal
sous le nom de php.exe sous Windows. La version
CGI est distribuée sous le nom de php-cgi.exe.
De plus, un fichier php-win.exe est distribué si PHP
est configuré en utilisant l'option de configuration
. Ce fichier fait la
même chose que la version &cli;, sauf qu'il n'affiche rien et qu'il ne fournit
pas de console.
Quel SAPI est installé ?
À partir d'un terminal, lancer php -v indiquera si
php est en version CGI ou
&cli;. Il est aussi possible de consulter la fonction
php_sapi_name et la constante
PHP_SAPI.
Une page man de manuel Unix est disponible
en tapant man php dans l'interpréteur de commande.
Différences avec les autres SAPIs
Les différences les plus notables entre le &cli; SAPI et les
SAPI sont :
Contrairement au CGI SAPI, aucun
en-tête HTTP n'est écrit dans le résultat.
Bien que le CGI SAPI fournisse un
moyen de supprimer les en-têtes HTTP, il n'est pas possible d'activer les
en-têtes HTTP dans le &cli.sapi;.
&cli; est lancé en mode silencieux par défaut, bien que les options
et soient gardées
pour rester compatible avec les anciennes versions CGI.
Il ne change pas le répertoire courant en celui du script.
(les options et sont
gardées par souci de compatibilité)
Messages d'erreurs en texte brut (pas de formatage HTML).
Il y a plusieurs directives du &php.ini; qui sont redéfinies par le
&cli.sapi;, car elles n'ont pas de sens en environnement shell :
Directives &php.ini; redéfiniesDirectiveValeur par défaut pour &cli; SAPICommentairehtml_errors&false;
Par défaut à &false;, vu qu'il peut être bien difficile de lire des messages
d'erreur sur un terminal lorsqu'ils sont noyés dans des balises HTML
non-interprétées.
implicit_flush&true;
Dans un terminal, il est généralement souhaitable que tout affichage en provenance de
print,
echo
et autres, soit immédiatement affiché, et non pas placé dans un
buffer quelconque. Néanmoins, il est toujours possible d'utiliser
la bufferisation de sortie
pour retarder un affichage, ou bien en manipuler le contenu
une dernière fois.
max_execution_time0 (sans limite)
PHP dans un terminal est susceptible d'être utilisé pour des tâches
bien plus diverses que dans des scripts web, et vu que cela
prend généralement beaucoup de temps, ce paramètre sera défini par défaut
à 0 permettant ainsi d'être illimité.
register_argc_argv&true;
La définition à &true; de cette directive signifie que les scripts
exécutés via le SAPI &cli; auront toujours
accès à argc (représentant le nombre
d'arguments passés à l'application) et
argv (le tableau contenant les arguments passés).
Les variables PHP $argc
et $argv sont automatiquement définies et remplies
avec les valeurs appropriées, lors de l'utilisation du
SAPI &cli;. Ces valeurs peuvent également
être trouvées dans la variable $_SERVER, par exemple :
$_SERVER['argv'].
La présence de $argv ou $_SERVER['argv']
n'est pas une indication fiable qu'un script est exécuté depuis la
ligne de commande, car ces variables peuvent être définies dans d'autres contextes
lorsque register_argc_argv est activé.
La valeur retournée par php_sapi_name devrait être vérifiée
à la place.
output_buffering&false;
Même si cette configuration INI est codée en dur à &false;,
les fonctions relatives à
l'affichage du buffer
sont disponibles.
max_input_time&false;
Le PHP &cli; ne supporte pas GET, POST et le téléchargement de fichiers.
Ces directives ne peuvent pas être initialisées avec d'autres valeurs
dans le fichier &php.ini; ou par une autre méthode. C'est une limitation,
car ces valeurs par défaut s'appliquent une fois que tous les autres
fichiers de configuration ont été analysés. Cependant, ces
valeurs peuvent être modifiées durant l'exécution (ce qui n'est pas
logique pour certaines directives, comme
register_argc_argv).
Il est recommandé de définir
ignore_user_abort pour
les scripts en ligne de commande. Voir la fonction
ignore_user_abort pour plus d'informations.
Pour faciliter le travail en environnement shell, plusieurs constantes
sont définies pour les flux
I/O.
Le &cli.sapi; ne transforme pas
le dossier courant en dossier d'exécution du script.
Exemple montrant la différence avec le SAPI
CGI :
]]>
Lors de l'utilisation de la version CGI, l'affichage sera :
Cela montre clairement que PHP modifie le dossier
courant, et utilise le dossier du script exécuté.
En utilisant le &cli.sapi;, on obtient :
Cela donne beaucoup plus de souplesse lors de la rédaction de
scripts shell avec PHP.
Le CGI SAPI se comporte de la même façon que le
&cli.sapi;, en lui passant l'option
, lorsqu'il est invoqué en ligne de commande.
Options de ligne de commandeOptions
La liste des options de ligne de commande fournies par PHP
est disponible à n'importe quel moment en exécutant PHP avec l'option
:
[--] [args...]
php [options] -r [--] [args...]
php [options] [-B ] -R [-E ] [--] [args...]
php [options] [-B ] -F [-E ] [--] [args...]
php [options] -- [args...]
php [options] -a
-a Run interactively
-c | Look for php.ini file in this directory
-n No php.ini file will be used
-d foo[=bar] Define INI entry foo with value 'bar'
-e Generate extended information for debugger/profiler
-f Parse and execute .
-h This help
-i PHP information
-l Syntax check only (lint)
-m Show compiled in modules
-r Run PHP without using script tags ..?>
-B Run PHP before processing input lines
-R Run PHP for every input line
-F Parse and execute for every input line
-E Run PHP after processing all input lines
-H Hide any passed arguments from external tools.
-S : Run with built-in web server.
-t Specify document root for built-in web server.
-s Output HTML syntax highlighted source.
-v Version number
-w Output source with stripped comments and whitespace.
-z Load Zend extension .
args... Arguments passed to script. Use -- args when first argument
starts with - or script is read from stdin
--ini Show configuration file names
--rf Show information about function .
--rc Show information about class .
--re Show information about extension .
--rz Show information about Zend extension .
--ri Show configuration for extension .
]]>
Options de ligne de commandeOptionOption longueDescription-a--interactive
Lance PHP de façon interactive. Pour plus d'informations, se reporter
à la documentation concernant le shell interactif.
-b--bindpath
Lie le chemin pour les externes, en mode serveur FASTCGI
(CGI uniquement).
-C--no-chdir
Ne pas aller dans le dossier du script (CGI uniquement).
-q--no-header
Mode silencieux. Supprime la sortie des en-têtes HTTP
(CGI uniquement).
-T--timing
Mesure le temps d'exécution du script, répété count
fois (CGI uniquement).
-c--php-ini
Spécifie le nom du dossier dans lequel se trouve le fichier &php.ini;,
ou encore spécifie un fichier de configuration (INI)
directement (qui ne s'appelle pas obligatoirement &php.ini;) :
Si cette option n'est pas spécifiée, &php.ini; est recherché dans
les endroits par défaut.
-n--no-php-ini
Ignore totalement &php.ini;.
-d--define
Définit une valeur personnalisée pour n'importe quelle directive
de configuration du fichier &php.ini;. La syntaxe est :
Exemple d'utilisation de -d pour définir une directive INI-e--profile-info
Génère des informations étendues pour le profilage et le débogage.
-f--file
Analyse et exécute le fichier spécifié. L'option
est facultative, et peut être omise. Le seul nom du fichier
est suffisant.
-h et -?--help et --usage
Affiche des informations sur la liste courante des options de la
ligne de commande, ainsi que leur description.
-i--info
Appelle la fonction phpinfo, et
affiche le résultat. Si PHP ne fonctionne pas
correctement, il est recommandé d'utiliser la commande php -i
et de voir s'il n'y a pas d'erreurs affichées avant ou après la
table d'information. N'oubliez pas que le résultat de cette
option, lors de l'utilisation du mode CGI, est au format
HTML, et donc de taille conséquente.
-l--syntax-check
Vérifie la syntaxe mais n'exécute pas le code PHP donné.
L'entrée provenant de l'entrée standard sera traitée si aucun nom de fichier n'est spécifié,
sinon chaque fichier spécifié sera vérifié.
En cas de réussite, le message
No syntax errors detected in <filename>
(Littéralement, aucune erreur de syntaxe n'a été détectée dans le fichier)
est affiché sur la sortie standard.
En cas d'erreur, le message Errors parsing <filename>
(Littéralement, erreur d'analyse dans le fichier filename)
est affiché, en plus des messages d'erreurs détectés par l'analyseur
lui-même.
Si des erreurs sont trouvées dans les fichiers spécifiés (ou l'entrée standard),
le code de retour du shell est défini à -1, sinon le
code de retour du shell est défini à 0.
Cette option ne détecte pas les erreurs fatales (par exemple les
fonctions non définies) qui nécessitent l'exécution du code.
Antérieur à PHP 8.3.0, il n'était possible de spécifier qu'un seul nom de fichier
à vérifier.
Cette option ne fonctionne pas avec l'option .
-m--modulesAffichage des modules internes (et chargés) de PHP et Zend-r--run
Permet l'exécution de PHP directement dans la ligne de commande.
Les balises de PHP (<?php et ?>)
ne sont pas nécessaires, et causeront
une erreur d'analyse si elles sont présentes.
Une attention toute particulière doit être portée lors de l'utilisation de cette option
de PHP, pour qu'il n'y ait pas de collision avec
les substitutions de variables en ligne de commande, réalisées par le
shell.
Erreur de syntaxe lors de l'utilisation de doubles guillemets
Le problème ici est que le shell (sh/bash) effectue une substitution
de variables, même avec les guillemets doubles ".
Puisque la variable $foo n'est probablement pas
définie dans le shell, elle est remplacée par rien, ce qui fait
que le code passé à PHP pour l'exécution est :
La solution de ce problème est d'utiliser les guillemets simples
'. Les variables de ces chaînes ne seront pas
substituées par leurs valeurs par le shell.
Utilisation de guillemets simples pour éviter une substitution
par le shell
int(1)
["E_WARNING"]=>
int(2)
["E_PARSE"]=>
int(4)
["E_NOTICE"]=>
int(8)
["E_CORE_ERROR"]=>
[...]
]]>
Si un shell différent de sh/bash est utilisé, d'autres problèmes pourront
être rencontrés - si approprié, un rapport de bogues pourra être ouvert
à &url.php.bugs;.
Il est toujours très facile d'avoir des problèmes en essayant
d'inclure des variables shell dans le code, ou d'utiliser les antislashs
pour la protection. Considérez-le comme un avertissement !
est disponible avec le &cli.sapi;
mais pas avec le SAPI CGI.
Cette option est seulement utilisée pour des choses simples. Ainsi,
quelques directives de configuration (par exemple auto_prepend_file et auto_append_file) sont ignorées
dans ce mode.
-B--process-begin
Code PHP à exécuter avant le traitement de stdin.
-R--process-code
Code PHP à exécuter pour chaque ligne en entrée.
Il y a deux variables spéciales de disponibles dans ce mode :
$argn et $argi.
$argn doit contenir la ligne PHP
traitée à ce moment donné, tandis que
$argi doit contenir le numéro de la ligne.
-F--process-file
Fichier PHP à exécuter pour chaque ligne en entrée.
-E--process-end
Code PHP à exécuter après avoir effectué l'entrée.
Exemple d'utilisation des options ,
et pour compter le nombre de lignes d'un projet.
-S--server
Démarre le serveur
web interne.
-t--docroot
Spécifie la racine des documents pour le serveur web interne.
-s--syntax-highlight et --syntax-highlighting
Affiche le code avec la colorisation syntaxique.
Cette option utilise le mécanisme interne pour analyser le fichier,
et écrire au format HTML une version colorisée du code source.
Il est à noter que cette option ne fait que générer un bloc HTML, avec les balises HTML
<code> [...] </code>, sans en-têtes HTML.
Cette option ne fonctionne pas avec l'option .
-v--versionUtilisation de l'option pour récupérer le nom du SAPI
ainsi que la version de PHP et de Zend-w--strip
Affiche la source sans les commentaires ni les espaces.
Cette option ne fonctionne pas avec l'option .
-z--zend-extension
Charge une extension Zend. Si et seulement si un fichier est fourni, PHP
essaie de charger cette extension dans le dossier courant par défaut
des bibliothèques sur le système (généralement spécifié avec
/etc/ld.so.conf sous Linux par exemple). Passer un nom de
fichier avec le chemin complet fera que PHP utilisera ce fichier,
sans recherche dans les dossiers classiques. Un chemin de dossier
relatif, incluant les informations sur le dossier, indiquera à PHP qu'il doit
chercher les extensions uniquement dans ce dossier.
--ini
Affiche les noms des fichiers de configuration et des dossiers analysés.
Exemple avec --ini--rf--rfunction
Affiche des informations sur la fonction donnée ou la méthode
d'une classe (c.-à-d. nombre et nom des paramètres).
Cette option n'est disponible que si PHP a été compilé avec le support
Reflection.
Exemple avec --rf
public function var_dump ] {
- Parameters [2] {
Parameter #0 [ $var ]
Parameter #1 [ $... ]
}
}
]]>
--rc--rclass
Affiche des informations sur la classe donnée (liste des constantes,
propriétés et méthodes).
Cette option n'est disponible que si PHP a été compilé avec le support
Reflection.
Exemple avec --rc
class Directory ] {
- Constants [0] {
}
- Static properties [0] {
}
- Static methods [0] {
}
- Properties [0] {
}
- Methods [3] {
Method [ public method close ] {
}
Method [ public method rewind ] {
}
Method [ public method read ] {
}
}
}
]]>
--re--rextension
Affiche les informations sur l'extension donnée (liste les options du
&php.ini;, les fonctions définies, les constantes et les classes).
Cette option n'est disponible que si PHP a été compilé avec le support
Reflection.
Exemple avec --re
extension #19 json version 1.2.1 ] {
- Functions {
Function [ function json_encode ] {
}
Function [ function json_decode ] {
}
}
}
]]>
--rz--rzendextension
Affiche les informations de configuration pour l'extension Zend fournie
(les mêmes informations que celles retournées par la fonction
phpinfo).
--ri--rextinfo
Affiche les informations de configuration pour l'extension donnée (les
mêmes informations retournées par la fonction phpinfo).
Les informations de configurations internes
sont disponibles en utilisant le nom d'extension "main".
Exemple avec --ri
enabled
"Olson" Timezone Database Version => 2009.20
Timezone Database => internal
Default timezone => Europe/Oslo
Directive => Local Value => Master Value
date.timezone => Europe/Oslo => Europe/Oslo
date.default_latitude => 59.930972 => 59.930972
date.default_longitude => 10.776699 => 10.776699
date.sunset_zenith => 90.583333 => 90.583333
date.sunrise_zenith => 90.583333 => 90.583333
]]>
Les options -rBRFEH, --ini et
--r[fcezi] ne sont disponibles qu'en mode &cli;.
Exécution de fichiers PHPUtilisation
Il y a 3 façons différentes d'appeler le &cli.sapi; avec du code PHP
à exécuter :
Indiquer à PHP d'exécuter un fichier donné :
Les deux méthodes (en utilisant ou pas) exécutent le
script contenu dans le fichier mon_script.php.
Notez qu'il n'existe pas de restriction sur les fichiers pouvant
être exécutés ; en particulier, il n'est pas nécessaire que l'extension
du fichier soit .php.
Donner du code PHP à exécuter directement en ligne de commande.
Une attention particulière doit alors être apportée aux variables d'environnement,
qui seront remplacées, et aux guillemets, qui ont des significations spéciales en
ligne de commande.
Lire l'exemple attentivement, il n'y a ni balise d'ouverture, ni balise de fermeture !
L'option rend caduque l'utilisation de celles-ci, et les ajouter conduirait
alors à une erreur d'analyse syntaxique.
Alimenter l'entrée standard en code PHP
(stdin).
Cela donne la possibilité de créer dynamiquement du code
PHP, puis de le fournir à PHP, et enfin,
de le traiter à nouveau en shell. Voici un exemple fictif :
final_output.txt
]]>
Il n'est pas possible de combiner ces trois modes d'exécution.
Comme toute application shell, l'exécutable PHP accepte
des arguments ; cependant, le script PHP peut aussi en recevoir.
Le nombre d'arguments pouvant être passés au script n'est pas limité par PHP
(le shell a une limite en termes de nombre de caractères qui peuvent être passés.
Généralement, cette limite ne sera pas atteinte). Les arguments passés au script seront
transmis via la variable tableau $argv. Le premier
index (zéro) contient toujours le nom du script appelé depuis la ligne
de commande. Il est à noter que, si le code est exécuté en ligne en utilisant
l'option de ligne de commande , la valeur de $argv[0]
sera "Standard input code"; antérieur à PHP 7.2.0,
c'était un tiret ("-") à la place. Cela est aussi vrai si
le code est exécuté via un pipe depuis STDIN.
Une seconde variable globale, $argc, contient le nombre
d'éléments du tableau $argv
(et non pas le nombre d'arguments passés
au script).
Tant que les arguments passés au script ne commencent pas par
le caractère -, il n'y a rien de spécial à surveiller.
Le fait de passer des arguments au script qui commencent par
- pose des problèmes car PHP
va penser qu'il doit les interpréter. Pour éviter cela, utiliser le séparateur
--. Après cet argument, tous les arguments suivants seront
passés au script sans être modifiés ou analysés par PHP.
[args...]
[...]
# Cela va passer l'argument '-h' au script, et éviter que PHP ne le traite
$ php -r 'var_dump($argv);' -- -h
array(2) {
[0]=>
string(1) "-"
[1]=>
string(2) "-h"
}
]]>
Cependant, il y a une autre méthode pour utiliser PHP en script shell ;
la première ligne du script devra être #!/usr/bin/php
(à remplacer par le chemin vers le binaire PHP &cli; sur le système sous-jacent).
Le reste du fichier doit contenir le code PHP normal, compris entre les
balises ouvrantes/fermantes. Après avoir mis les droits d'exécution sur le
script (chmod +x test), il peut être exécuté comme un script
shell ou perl habituel :
Exécute un script PHP en tant que script shell
]]>
En supposant que ce fichier s'appelle test, dans le
dossier courant, il est alors possible de faire ceci :
string(6) "./test"
[1]=>
string(2) "-h"
[2]=>
string(2) "--"
[3]=>
string(3) "foo"
}
]]>
Comme on peut le voir, dans ce cas, il n'est pas nécessaire
de faire attention lors du passage de paramètres qui commencent par
- au script.
L'exécutable PHP peut être utilisé pour exécuter des scripts indépendants du
serveur web. Sur un système Unix, il est recommandé d'ajouter
la ligne spéciale en début de script, de le rendre exécutable de
manière que le système sache quel programme doit exécuter le script.
Sous Windows, il est possible d'associer l'exécutable php.exe
avec le double-clic sur les fichiers d'extension .php,
ou bien de faire un fichier batch pour exécuter le script grâce
à PHP. La première ligne utilisée dans le monde Unix ne perturbera pas
l'exécution sous Windows, ce qui rend les scripts facilement portables. Un exemple
complet est disponible ci-dessous :
Script prévu pour être exécuté en ligne de commande (script.php)
C'est une ligne de commande à une option.
Utilisation :
Le script ci-dessus inclut la première ligne spéciale indiquant que ce fichier
doit être exécuté par PHP. Nous travaillons ici avec la version &cli;, aussi,
aucun en-tête HTTP ne sera affiché.
Le programme commence par vérifier que l'argument requis est spécifié
(en plus du nom du script, qui est aussi compté). S'il n'est pas présent,
ou si l'argument est , ,
ou , un message d'aide sera affiché,
en utilisant $argv[0] pour afficher dynamiquement le nom
du script tel qu'entré dans la ligne de commande. Sinon, l'argument est affiché
tel qu'il a été entré dans le terminal.
Pour exécuter le script ci-dessus sous Unix, il faut le rendre
exécutable, puis l'appeler avec une commande comme :
script.php echothis ou
script.php -h. Sous Windows, il est possible de faire un
fichier batch pour cela :
Fichier batch pour exécuter un script PHP en ligne de commande (script.bat)
En supposant que le programme ci-dessus est nommé
script.php, et que l'exécutable &cli;
php.exe se trouve dans
C:\php\php.exe, ce fichier batch l'exécutera
avec les options qui lui sont passées :
script.bat echothis ou
script.bat -h.
Voir aussi l'extension Readline,
qui dispose de nombreuses fonctions pour améliorer la convivialité
des applications PHP en ligne de commande.
Sous Windows, PHP peut être configuré pour fonctionner sans avoir
besoin de fournir les extensions C:\php\php.exe
ou .php, tel que décrit dans
la ligne de commande PHP sous
Microsoft Windows.
Sous Windows, il est recommandé d'exécuter PHP sous un compte utilisateur.
Lorsque PHP est exécuté sous un service réseau, certaines opérations peuvent
échouer, car "Aucun lien entre les noms de compte et les identifiants de
sécurité n'est réalisé".
Flux d'entrée/sortieFlux I/O
Le &cli.sapi; définit quelques constantes pour les flux I/O pour
rendre la programmation en ligne de commande plus facile.
Constantes spécifiques CLIConstanteDescriptionSTDIN
Un flux déjà ouvert vers stdin. Ceci évite de
l'ouvrir explicitement avec
]]>
Pour lire une seule ligne depuis stdin,
il est possible d'utiliser
]]>
STDOUT
Un flux déjà ouvert vers stdout. Ceci évite de
l'ouvrir explicitement avec
]]>
STDERR
Un flux déjà ouvert vers stderr.
Ceci évite de l'ouvrir explicitement avec
]]>
Ainsi, il n'est pas nécessaire d'ouvrir un flux spécifique pour, par exemple,
stderr mais il suffit d'utiliser la constante
correspondante à ce flux :
Il n'est pas nécessaire de clore explicitement ces flux, sachant qu'ils le seront
automatiquement par PHP à la fin du script.
Ces constantes ne sont pas disponibles lors d'une lecture d'un
script PHP depuis stdin.
Shell Interactif
Le &cli.sapi; fournit un shell interactif lors de l'utilisation
de l'option si PHP a été compilé avec l'option .
À partir de PHP 7.1.0, le shell interactif est également disponible sur Windows,
si l'extension readline est activée.
En utilisant le shell interactif, il est possible de taper du code PHP
et qu'il soit exécuté directement.
Exécution de code en utilisant le shell interactif
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.
À partir de PHP 8.4.0, le chemin vers le fichier d'historique peut être défini en utilisant la
variable d'environnement PHP_HISTFILE.
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 :
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 :
strpt[TAB]ime(
]]>
La complétion fonctionnera aussi pour les noms qui ont été définis lors
de la session courante du shell interactif :
$fooThisIsAReallyLongVariableName = 42;
php > $foo[TAB]ThisIsAReallyLongVariableName
]]>
Le shell interactif stocke l'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.
Définition de directives du &php.ini; dans un shell interactif
La définition de la directive cli.prompt :
#cli.prompt=hello world :>
hello world :>
]]>
En utilisant des backticks, il est possible d'exécuter du code PHP
dans le prompte :
#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 :
#cli.pager=less
php > phpinfo();
(sortie affichée avec less)
php >
]]>
La directive cli.prompt supporte quelques séquences d'échappement :
Séquences d'échappement de cli.promptSéquence :Description :\e
utilisé pour ajouter des couleurs au prompte. Exemple :
\e[032m\v \e[031m\b \e[34m\> \e[0m\vLa 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 : ' " {
( >
Les fichiers inclus via auto_prepend_file et auto_append_file sont analysés
dans ce mode, mais avec quelques restrictions - c.-à-d. les fonctions
doivent avoir été définies avant l'appel.
Mode interactif
Si l'extension readline n'est pas disponible, antérieur à PHP 8.1.0,
invoquer le &cli.sapi; avec l'option fournit le mode interactif.
Dans ce mode, un script PHP complet est supposé être donné via STDIN,
et après l'interruption
avec
CTRLD
(POSIX) ou
CTRLZ
suivi de ENTER (Windows), ce script sera évalué.
Ceci est basiquement identique à invoquer le &cli.sapi; sans l'option .
À partir de PHP 8.1.0, invoquer le &cli.sapi; avec l'option
échoue, si l'extension readline n'est pas disponible.
Serveur web interne
Ce serveur web est prévu pour aider dans le développement des applications.
Il peut également être utile pour les tests, et pour les démonstrations
d'applications qui sont exécutées dans des environnements contrôlés.
Mais par contre, il n'a pas été conçu pour être un serveur web complet.
Aussi, il ne devrait pas être utilisé dans un réseau public.
Le &cli.sapi; fournit un serveur web interne.
Le serveur web s'exécute sur un seul processus single-threaded,
les applications PHP seront retardées/suspendues si une requête est bloquée.
Les requêtes URI sont servies depuis le dossier de travail courant
où PHP a été démarré, à moins que l'option -t ne soit utilisée pour spécifier
explicitement un document racine. Si une requête URI ne spécifie
pas un fichier, alors le fichier index.php ou le fichier
index.html du dossier courant sera retourné. Si aucun de ces fichiers n'existe,
la recherche d'un fichier index.php et index.html se poursuivra dans le dossier
parent et ainsi de suite jusqu'à ce qu'un de ces fichiers ne soit trouvé ou
que le dossier racine ne soit atteint. Si un fichier index.php ou index.html
est trouvé, il sera retourné et $_SERVER['PATH_INFO'] sera défini comme la
dernière partie de l'URI. Sinon, un code réponse 404 sera retourné.
Si un fichier PHP est fourni dans la ligne de commande lorsque le serveur web
est démarré, il sera traité comme un script "routeur".
Le script sera exécuté au début de chaque requête HTTP. Si ce script retourne
&false;, alors la ressource demandée est retournée telle quelle.
Sinon, la sortie du script est retournée au navigateur.
Les types MIME standards sont retournés pour les fichiers avec les extensions :
.3gp.apk.avi.bmp.css.csv.doc.docx.flac.gif.gz.gzip.htm.html.ics.jpe.jpeg.jpg.js.kml.kmz.m4a.mov.mp3.mp4.mpeg.mpg.odp.ods.odt.oga.ogg.ogv.pdf.png.pps.pptx.qt.svg.swf.tar.text.tif.txt.wav.webm.wmv.xls.xlsx.xml.xsl.xsd.zip
.
À partir de PHP 7.4.0, le serveur web intégré peut être configuré pour bifurquer plusieurs
travailleurs afin de tester du code nécessitant plusieurs requêtes concurrentes
au serveur web intégré.
Définissez la variable d'environnement PHP_CLI_SERVER_WORKERS sur le
nombre de travailleurs souhaité avant de démarrer le serveur.
Cette fonctionnalité n'est pas prise en charge sur Windows.
Pour des informations sur l'utilisation et les options de PHP en ligne de commande, exécuter
php --help ou man php. Toutes les
options ne s'appliquent pas lors de l'exécution du serveur web.
Cette fonctionnalité expérimentale n'est pas
destinée à une utilisation en production. En général, le Serveur Web intégré
n'est pas destiné à une utilisation en production.
Démarrage du serveur web
Le terminal affichera :
Après des requêtes URI sur http://localhost:8000/ et
http://localhost:8000/myscript.html, le terminal affichera quelque chose
comme :
Noter qu'antérieur à PHP 7.4.0, les ressources statiques en lien symbolique
ne sont pas accessibles sous Windows, tant que le script routeur
ne le gère pas.
Démarrage avec un dossier racine spécifique
Le terminal affichera :
Utilisation d'un script routeur
Dans cet exemple, le fait de demander des images les affichera,
mais les requêtes pour les fichiers HTML afficheront
"Bienvenue chez PHP !".
Bienvenue chez PHP !";
}
?>]]>
Vérification de l'utilisation CLI du serveur Web
Pour ré-utiliser un script router du framework lors du
développement avec le CLI du serveur web et ensuite, continuer
de l'utiliser avec un serveur web de production :
]]>
Gestion des types de fichiers non supportés
Pour servir une ressource statique pour laquelle le type
MIME n'est pas géré par le CLI du serveur web, utiliser ceci :
]]>
Accès au CLI du serveur web depuis une machine distante
Il est possible de rendre le serveur web accessible sur le port 8000
pour toutes les interfaces avec :
Le serveur web intégré ne devrait pas être utilisé sur un réseau public.
Configurations INI
Options de configuration CLI SAPI&Name;&Default;&Changeable;&Changelog;cli_server.color"0"INI_ALL
&ini.descriptions.title;
cli_server.colorbool
Active le serveur web de développement interne à utiliser
la coloration ANSI du code dans la sortie du terminal.