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és 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 vous pouvez 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 votre 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 et sapi/cli/php dans votre répertoire source PHP. Vous remarquerez que les deux se nomment php. Ce qui se passe ensuite pendant le make install dépend de votre 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 votre ligne de configuration, le &cli; est copié dans {PREFIX}/bin/php pendant le make install. Si vous voulez forcer l'installation du binaire CGI, lancez make install-cli après le make install. Sinon, vous pouvez aussi spécifier dans votre ligne de configuration. Du fait que les deux options et sont activées par défaut, avoir simplement dans votre 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 vous dira si php est en version CGI ou &cli;. Vous pouvez aussi 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érence 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 ignorées par le &cli.sapi;, car elles n'ont pas de sens en environnement shell : Directives &php.ini; ignorées Directive Valeur par défaut pour &cli; SAPI Commentaire &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. &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 si vous voulez 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']. 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> : ]]> Lorsque vous utilisez 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 lorsque vous rédigez des scripts shell avec PHP. Le CGI SAPI se comporte de la même façon que le &cli.sapi;, en lui passant l'option , lorsque vous l'invoquez 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, reportez-vous à la documentation concernant le shell intéractif. -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 : -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, si vous utilisez le mode CGI, est au format HTML, et donc de taille conséquente. -l --syntax-check Vérifie syntaxiquement le code PHP fourni. 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, et le script shell retourne 0. 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. Le script Shell retourne le code -1. Cette option ne détecte pas les erreurs fatales (par exemple les fonctions non définies). Utilisez l'option pour tester aussi les erreurs fatales. 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 via à &url.php.bugs;. Il est toujours très facile d'avoir des problèmes lorsque vous essayez d'inclure des variables shell dans le code, ou d'utiliser les antislashs pour la protection. Vous aurez été prévenu ! 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. Disponible depuis 5.4.0. -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. Notez 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 votre 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 (i.e. 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 fourni (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" ou "core". 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. Lisez 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 à votre 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, vous n'atteindrez pas cette limite). 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. Notez que, si le code est exécuté en ligne en utilisant l'option de ligne 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 à votre 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, utilisez 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 vous pouvez le voir, dans ce cas, vous n'avez pas besoin de faire attention lors du passage de paramètres qui commencent par - à votre script. L'exécutable PHP peut être utilisé pour exécuter des scripts indépendants du serveur web. Si vous êtes 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, vous pouvez associer l'exécutable php.exe avec le double-clic sur les fichiers d'extension .php, ou bien vous pouvez 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, vous devez le rendre exécutable, puis l'appeler avec une commande comme : script.php echothis ou script.php -h. Sous Windows, vous pouvez 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 que vous lui passez : script.bat echothis ou script.bat -h. Voir aussi l'extension Readline, qui dispose de nombreuses fonctions pour améliorer la convivialité de 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 ]]> Si vous voulez lire une seule ligne depuis stdin, vous pouvez 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, vous n'avez pas besoin d'ouvrir un flux spécifique pour, par exemple, stderr mais vous pouvez simplement utiliser la constante correspondante à ce flux : Vous n'avez pas à clore explicitement ces flux, sachant qu'ils le seront automatiquement par PHP à la fin de votre 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 intéractif lors de l'utilisation de l'option si PHP a été compilé avec l'option . 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. 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. 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 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. 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'échappements : Séquences d'échappements 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 - 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 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 CRTL+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és/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 fichier 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, .pdf, .png, .pps, .pptx, .qt, .svg, .swf, .tar, .text, .tif, .txt, .wav, .webm, .wmv, .xls, .xlsx, .xml, .xsl, .xsd, and .zip. Historique des modifications : Les types MIME standards (extensions de fichiers) &Version; &Description; 5.5.12 .xml, .xsl, and .xsd 5.5.7 .3gp, .apk, .avi, .bmp, .csv, .doc, .docx, .flac, .gz, .gzip, .ics, .kml, .kmz, .m4a, .mp3, .mp4, .mpg, .mpeg, .mov, .odp, .ods, .odt, .oga, .pdf, .pptx, .pps, .qt, .swf, .tar, .text, .tif, .wav, .wmv, .xls, .xlsx, and .zip 5.5.5 .pdf 5.4.11 .ogg, .ogv, and .webm 5.4.4 .htm and .svg
Changelog &Version; &Description; 7.4.0 Le serveur web intégré peut être configuré pour fork en de multiple workers pour tester du code qui nécéssite plusieurs requêtes concurrentes au serveur web intégré. Définir la variable d'environnement PHP_CLI_SERVER_WORKERS au nombre désiré de workers avant de démarrer le serveur. Ceci n'est pas supporté sous Windows. Ce comportement expérimental n'est pas prévu pour un usage en production. Plus générallement, le serveur web intégré n'est pas prévu pour un usage 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 quelques choses comme : Noter qu'avant 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, continuez de l'utiliser avec un serveur web de production : ]]> Gestion des types de fichiers non supportés Si vous devez servir une ressource statique pour laquelle le type MIME n'est pas géré par le CLI du serveur web, utilisez ceci : ]]> Accès au CLI du serveur web depuis une machine distante Vous pouvez rendre le serveur web accessible sur le port 8000 pour toutes les interfaces avec : Le serveur web intégré ne doit pas être utilisé sur un réseau public.
Configurations INI Options de configuration CLI SAPI &Name; &Default; &Changeable; &Changelog; cli_server.color "0" PHP_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.