Utiliser PHP en ligne de commande Utilisation des lignes de commande
Introduction 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 <acronym>SAPI</acronym>s 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éfinies Directive Valeur par défaut pour &cli; SAPI Commentaire html_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_time 0 (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 <acronym>SAPI</acronym> <acronym>CGI</acronym> : ]]> 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 commande Options 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 commande Option Option longue Description -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 <literal>-d</literal> 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 --modules Affichage 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 <option>-B</option>, <option>-R</option> et <option>-E</option> 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 --version Utilisation de l'option <option>-v</option> pour récupérer le nom du <acronym>SAPI</acronym> 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 <literal>--ini</literal> --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 <literal>--rf</literal> 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 <literal>--rc</literal> 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 <literal>--re</literal> 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 <literal>--ri</literal> 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 PHP Utilisation 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/sortie Flux 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 CLI Constante Description STDIN 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 <parameter>cli.prompt</parameter> 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 : ' " { ( >
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 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 . À 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.color bool Active le serveur web de développement interne à utiliser la coloration ANSI du code dans la sortie du terminal.