Utiliser PHP en ligne de commande

Depuis la version 4.3.0, PHP supporte un nouveau type de SAPI (Server Application Programming Interface, c'est-�-dire Interface de Programmation d'Applications Serveur) appel� CLI, ce qui signifie Command Line Interface et se traduit par "Interface de Ligne de Commande". Comme son nom l'indique, ce type SAPI cible les applications Shell (ou desktop), �crites en PHP. Il y a un certain nombre de diff�rences entre le type CLI SAPI et les autres SAPI expliqu�s dans ce chapitre. Il convient de pr�ciser que CLI et CGI sont des SAPI diff�rentes, bien qu'ils partagent des comportements similaires.

Le CLI SAPI a �t� publi� pour la premi�re fois avec la version PHP 4.2.0, mais il �tait exp�rimental, et devait �tre explicitement activ� avec l'option --enable-cli lorsque vous ex�cutez le script ./configure. Depuis PHP 4.3.0, le CLI SAPI n'est plus exp�rimental, et l'option --enable-cli est activ�e par d�faut. Vous pouvez utiliser l'option --disable-cli pour le d�sactiver.

Depuis PHP 4.3.0, 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 --disable-cgi a �t� activ�e, le CLI est copi� dans {PREFIX}/bin/php pendant le make install. Si, par exemple, --with--apxs figure dans votre ligne de configuration, le CLI est copi� dans {PREFIX}/bin/php pendant le make install, sinon c'est le CGI qui y est plac�. Si vous voulez forcer l'installation du binaire CGI, lancez make install-cli apr�s le make install. Sinon, vous pouvez aussi sp�cifier --disable-cgi dans votre ligne de configuration.

Note: Du fait que les deux options --enable-cli et --enable-cgi sont activ�es par d�faut, avoir simplement --enable-cli dans votre ligne de configuration n'implique pas n�cessairement que le CLI soit renomm� en {PREFIX}/bin/php pendant le make install.

Les paquets Windows entre PHP 4.2.0 et PHP 4.2.3 installaient le CLI en tant que php-cli.exe et laissaient le CGI en tant que php-cli.exe dans le m�me r�pertoire. Depuis PHP 4.3.0, le paquet Windows installe le CLI en tant que php.exe dans un r�pertoire � part nomm� cli, donc cli/php.exe. Depuis PHP 5, le CLI est install� dans le r�pertoire principal en tant que php.exe. La version CGI est nomm�e quand � elle php-cgi.exe.

Depuis PHP 5, un nouveau fichier php-win.exe est install�. C'est l'�quivalent de la version CLI � ceci pr�s qu'il n'affiche rien et ainsi ne fait pas appara�tre de console (aucune fen�tre "dos" n'appara�t � l'�cran). Ce comportement est similaire � celui de php-gtk. Vous pouvez l'activer avec l'option --enable-cli-win32.

Note: 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.

Note: Une page man de manuel Unix a �t� ajout�e avec PHP 4.3.2. Vous pouvez la consulter en tapant man php dans votre interpr�teur de commande.

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'y a pas moyen d'activer les en-t�tes HTTP dans le CLI SAPI.

    CLI est lanc� en mode silencieux par d�faut, bien que les options -q et --no-header 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 -C et --no-chdir 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
    html_errors FALSE Il peut �tre bien difficile de lire les messages d'erreur sur un terminal lorsqu'ils sont noy�s dans des balises HTML sans grand int�r�t. Par cons�quent, cette directive est forc�e � FALSE.
    implicit_flush TRUE Il est souhaitable que tout affichage en provenance de print(), echo() et consorts, soit imm�diatement affich� dans le terminal, et non pas plac� dans un buffer quelconque. Vous pouvez toujours 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) �tant donn�es les possibilit�s infinies de PHP en environnement shell, le temps d'ex�cution maximal d'un script PHP a �t� rendu illimit�. Alors que les scripts destin�s au web doivent s'accomplir en une fraction de seconde, il arrive que les scripts shell requi�rent bien plus de temps.
    register_argc_argv TRUE

    En donnant la valeur de TRUE � cette directive, vous aurez toujours acc�s � la variable argc (repr�sentant le nombre d'arguments pass�s � l'application) et argv (le tableau contenant les arguments pass�s) dans le CLI SAPI.

    Depuis PHP 4.3.0, les variables $argc et $argv sont d�finies et remplies avec les valeurs appropri�es, en utilisant CLI SAPI. Avant cette version, la cr�ation de ces variables �tait li�e au comportement des versions CGI et MODULE, qui requi�rent l'activation de la directive register_globals. Ind�pendamment de la version ou de la valeur de register_globals, vous pouvez toujours acc�der � $_SERVER et $HTTP_SERVER_VARS. Par exemple : $_SERVER['argv']

    Note: 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).

  • Pour faciliter le travail en environnement shell, les constantes suivantes sont d�finies :

    Constantes sp�cifiques au CLI
    Constante Description
    STDIN

    Un pointeur de fichier d�j� disponible vers stdin. Cela �vite de l'ouvrir avec

    <?php

    $stdin 
    fopen('php://stdin''r');

    ?>

    Si vous voulez lire une seule ligne depuis stdin, vous pouvez utiliser :

    <?php
    $line 
    trim(fgets(STDIN)); // lit une seule ligne depuis STDIN
    fscanf(STDIN"%d\n"$number); // lit les nombres depuis STDIN
    ?>

    STDOUT

    Un descripteur de fichier d�j� disponible vers stdout. Cela �vite de l'ouvrir avec

    <?php

    $stdout 
    fopen('php://stdout''w');

    ?>

    STDERR

    Un descripteur de fichier d�j� disponible vers stderr. Cela �vite de l'ouvrir avec

    <?php

    $stderr 
    fopen('php://stderr''w');

    ?>

    �tant donn� ce qui pr�c�de, vous n'avez pas besoin d'ouvrir un flux vers stderr par vous-m�me, mais vous pouvez utiliser cette constante directement, comme un descripteur de fichier :

    php -r 'fwrite(STDERR, "stderr\n");'

    Vous n'avez pas non plus � fermer explicitement ces fichiers, PHP s'en chargera automatiquement � la fin du script.

    Note: Ces constantes ne sont pas disponibles si le script PHP est lu depuis stdin.

  • Le CLI SAPI ne transforme pas le dossier courant en dossier d'ex�cution du script !

    Exemple montrant la diff�rence avec le CGI SAPI :

    <?php
    // Un test simple : affiche le dossier d'ex�cution */
    echo getcwd(), "\n";
    ?>

    Lorsque vous utilisez la version CGI, l'affichage sera :

    $ pwd
    /tmp
    
    $ php-cgi -f autre_dossier/test.php
    /tmp/autre_dossier
    

    Cela montre clairement que PHP modifie le dossier courant, et utilise le dossier du script ex�cut�.

    En utilisant le CLI SAPI, on obtient :

    $ pwd
    /tmp
    
    $ php -f autre_dossier/test.php
    /tmp
    

    Cela donne beaucoup plus de souplesse lorsque vous r�digez des scripts shell avec PHP.

    Note: Le CGI SAPI se comporte de la m�me fa�on que le CLI SAPI, en lui passant l'option -C, lorsque vous l'invoquez en ligne de commande.

La liste des options de ligne de commande fournies par PHP est disponible � n'importe quel moment en ex�cutant PHP avec l'option -h :

Usage: php [options] [-f] <file> [--] [args...]
 php [options] -r <code> [--] [args...]
 php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
 php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
 php [options] -- [args...]
 php [options] -a

-a               Run interactively
-c <path>|<file> 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 <file>        Parse and execute <file>.
-h               This help
-i               PHP information
-l               Syntax check only (lint)
-m               Show compiled in modules
-r <code>        Run PHP <code> without using script tags <?..?>
-B <begin_code>  Run PHP <begin_code> before processing input lines
-R <code>        Run PHP <code> for every input line
-F <file>        Parse and execute <file> for every input line
-E <end_code>    Run PHP <end_code> after processing all input lines
-H               Hide any passed arguments from external tools.
-s               Display colour syntax highlighted source.
-v               Version number
-w               Display source with stripped comments and whitespace.
-z <file>        Load Zend extension <file>.

args...          Arguments passed to script. Use -- args when first argument
                 starts with - or script is read from stdin

--ini            Show configuration file names

--rf <name>      Show information about function <name>.
--rc <name>      Show information about class <name>.
--re <name>      Show information about extension <name>.
--ri <name>      Show configuration for extension <name>.

Le CLI SAPI dispose de trois moyens pour lire le code du script PHP que vous voulez ex�cuter :

  1. Indiquer � PHP d'ex�cuter un fichier donn� :

    php mon_script.php
    
    php -f mon_script.php
    

    Les deux m�thodes (en utilisant -f ou pas) ex�cutent le script contenu dans le fichier mon_script.php. Vous pouvez choisir n'importe quel fichier, et ces fichiers ne sont pas tenus d'utiliser l'extension .php. N'importe quelle extension peut faire l'affaire.

    Note: Si vous devez passer des arguments � votre script, vous devez passer -- comme premier argument lorsque vous utilisez -f.

  2. Donner du code PHP � ex�cuter directement en ligne de commande.

    php -r 'print_r(get_defined_constants());'
    

    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.

    Note: Lisez l'exemple attentivement, il n'y a ni balise d'ouverture, ni balise de fermeture ! L'option -r rend caduque l'utilisation de celles-ci, et les ajouter conduirait alors � une erreur d'analyse syntaxique.

  3. 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 :

    $ some_application | some_filter | php | sort -u >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, et votre script PHP peut aussi les recevoir. Le nombre d'arguments n'est pas limit� par PHP (le shell a une limite en terme 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. L'index z�ro contiendra toujours le nom du script appel� (qui sera - dans le cas o� le code PHP arrive de l'entr�e standard ou depuis la ligne de commande, pass� -r). L'autre variable globale fournie est $argc qui contient le nombre d'�l�ments dans le tableau $argv (ce nombre est diff�rent du nombre d'arguments pass�s au script).

Tant que les arguments que vous passez � votre script ne commencent pas par le caract�re -, il n'y a rien de sp�cial � surveiller. Si vous passez des arguments � votre script qui commencent par -, cela posera 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 � votre script sans �tre modifi�s ou analys�s par PHP.

# Cela ne va pas ex�cuter le code, mais afficher l'aide de PHP
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f] <file> [args...]
[...]

# Cela va passer l'argument '-h' � votre 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. Vous pouvez aussi utiliser la ligne #!/usr/bin/php en tout d�but de votre script, suivie de code PHP compris entre balise ouvrantes/fermantes. Apr�s avoir mis les droits d'ex�cution sur votre script (chmod +x test), il peut �tre ex�cut� comme un script shell ou perl habituel :

Exemple #1 Ex�cute un script PHP en tant que script shell

<?php
var_dump
($argv);
?>

En supposant que ce fichier s'appelle test, dans le dossier courant, nous pouvons alors faire ceci :

$ chmod +x test
$ ./test -h -- foo
array(4) {
   [0]=>
   string(6) "./test"
   [1]=>
   string(2) "-h"
   [2]=>
   string(2) "--"
   [3]=>
   string(3) "foo"
}

Comme vous le voyez, aucune pr�caution n'est n�cessaire pour passer des param�tres qui commencent par - � votre script.

Les options longues sont disponibles depuis PHP 4.3.3.

Options de ligne de commande
Option Option longue Description
-a --interactive

Lance PHP de fa�on interactive. Si vous compilez PHP avec l'extension Readline (qui n'est pas disponible sous Windows), vous aurez un shell joli, incluant la fonctionnalit� de compl�tion (e.g. vous pouvez commencer � taper un nom de variable, taper la touche TABULATION et PHP compl�tera son nom) et un historique de ce que vous entrez au clavier qui peut �tre consult� en utilisant les touches fl�ch�es. Cet historique est sauvegard� dans le fichier ~/.php_history.

Note: Les fichiers incluent dans auto_prepend_file et auto_append_file sont analys�s dans ce mode avec quelques restrictions - par exemple, les fonctions doivent �tre d�finies avant d'�tre appel�es.

Note: Autoloading n'est pas disponible si vous utilisez PHP en mode int�ractif CLI.

-c --php-ini

Cette option permet de sp�cifier le nom du dossier dans lequel se trouve le fichier php.ini, ou encore de sp�cifier un fichier de configuration (INI) directement (qui ne s'appelle pas obligatoirement php.ini) :

$ php -c /custom/directory/ mon_script.php

$ php -c /custom/directory/custom-file.ini mon_script.php

Si vous ne sp�cifiez pas cette option, le fichier est recherch� dans les endroits par d�faut.

-n --no-php-ini

Ignore compl�tement php.ini. Cette option est disponible depuis PHP 4.3.0.

-d --define

Cette option permet de modifier n'importe quelle directive de configuration du fichier php.ini. La syntaxe est :

 -d configuration_directive[=value]

Exemples :

# L'omission de la valeur conduit � donner la valeur de "1"
$ php -d max_execution_time -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(1) "1"

# Passer une valeur vide conduit � donner la valeur de ""
php -d max_execution_time= -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(0) ""

# La directive de configuration sera n'importe quelle valeur pass�e apr�s le caract�re '='
$  php -d max_execution_time=20 -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(2) "20"
$  php -d max_execution_time=doesntmakesense -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(15) "doesntmakesense"

-e --profile-info

G�n�re des informations �tendues pour le profilage et le d�bogage.

-f --file

Analyse et ex�cute le fichier donn� apr�s l'option -f. Cette option est facultative, et peut �tre omise. Le seul nom du fichier est suffisant.

Note: Pour passer des arguments � votre script, le premier argument doit �tre --, sinon, PHP les interpr�tera comme des options PHP.

-h et -? --help Avec cette option, vous pouvez obtenir des informations sur la liste courante des options de la ligne de commande, ainsi que leur description.
-i --info Cette option 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

Cette option permet de faire une v�rification syntaxique sur 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 -f si vous voulez tester aussi ces erreurs.

Note: Cette option ne fonctionne pas avec l'option -r.

-m --modules

Cette option liste les extensions PHP et Zend compil�es (et charg�es) :

$ php -m
[PHP Modules]
xml
tokenizer
standard
session
posix
pcre
overload
mysql
mbstring
ctype

[Zend Modules]

-r --run

Cette option 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.

Note: 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.

Exemple conduisant � une erreur d'analyse :

$ php -r "$foo = get_defined_constants();"
Command line code(1) : Parse error - parse error, unexpected '='

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 :

$ php -r " = get_defined_constants();"

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.

$ php -r '$foo = get_defined_constants(); var_dump($foo);'
array(370) {
["E_ERROR"]=>
int(1)
["E_WARNING"]=>
int(2)
["E_PARSE"]=>
int(4)
["E_NOTICE"]=>
int(8)
["E_CORE_ERROR"]=>
[...]

Si vous utilisez un shell diff�rent de sh/bash, vous pouvez rencontrer d'autres probl�mes. N'h�sitez pas � ouvrir un rapport de bogues � » http://bugs.php.net/. 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 antislash pour la protection. Vous aurez �t� pr�venu.

Note: -r est disponible avec le CLI SAPI et pas avec le CGI SAPI.

Note: Cette option est utilis�e pour des choses vraiment de base. Ainsi, quelques directives de configuration (par exemple auto_prepend_file et auto_append_file) sont ignor�es dans ce mode.

-B --process-begin

PHP code � ex�cuter avant le traitement de stdin. Ajout� en PHP 5.

-R --process-code

Code PHP � ex�cuter pour chaque ligne en entr�e. Ajout� en PHP 5.

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. Ajout� en PHP 5.

-E --process-end

Code PHP � ex�cuter apr�s avoir effectu� l'entr�e. Ajout� en PHP 5.

Exemple #2 Exemple d'utilisation des options -B, -R et -E pour compter le nombre de lignes d'un projet.

$ find my_proj | php -B '$l=0;' -R '$l += count(@file($argn));' -E 'echo "Total Lines: $l\n";'
Total Lines: 37328

-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 produire une version coloris�e du code source, au format HTML. Notez que cette option ne fait que g�n�rer un bloc HTML, avec les balises HTML <code> [...] </code>, sans en-t�tes HTML.

Note: Cette option ne fonctionne pas avec l'option -r.

-v --version

Affiche les versions de PHP, PHP SAPI, et Zend sur la sortie standard. Par exemple :

$ php -v
PHP 4.3.0 (cli), Copyright (c) 1997-2002 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2002 Zend Technologies

-w --strip

Affiche la source sans les commentaires et les espaces.

Note: Cette option ne fonctionne pas avec l'option -r.

-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�que sur votre syst�me (g�n�ralement sp�cifi� avec /etc/ld.so.conf sous Linux). 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 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. Disponible depuis PHP 5.2.3.

Exemple #3 Exemple avec --ini

$ php --ini
Configuration File (php.ini) Path: /usr/dev/php/5.2/lib
Loaded Configuration File:         /usr/dev/php/5.2/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

--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). Disponible depuis PHP 5.1.2.

Cette option n'est disponible que si PHP a �t� compil� avec le support Reflection.

Exemple #4 Exemple avec --rf

$ php --rf var_dump
Function [ <internal> public function var_dump ] {

- Parameters [2] {
Parameter #0 [ <required> $var ]
Parameter #1 [ <optional> $... ]
}
}

--rc --rclass

Affiche des informations sur la classe donn�e (liste des constantes, propri�t�s et m�thodes). Disponible depuis PHP 5.1.2.

Cette option n'est disponible que si PHP a �t� compil� avec le support Reflection.

Exemple #5 Exemple avec --rc

$ php --rc Directory
Class [ <internal:standard> class Directory ] {

  - Constants [0] {
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [0] {
  }

  - Methods [3] {
    Method [ <internal> public method close ] {
    }

    Method [ <internal> public method rewind ] {
    }

    Method [ <internal> public method read ] {
    }
  }
}

--re --rextension

Affiche les informations sur l'extension donn� (liste les options du php.ini, les fonctions d�finies, les constantes et les classes). Disponible depuis PHP 5.1.2.

Cette option n'est disponible que si PHP a �t� compil� avec le support Reflection.

Exemple #6 Exemple avec --re

$ php --re json
Extension [ <persistent> extension #19 json version 1.2.1 ] {

  - Functions {
    Function [ <internal> function json_encode ] {
    }
    Function [ <internal> function json_decode ] {
    }
  }
}

--ri --rextinfo

Affiche les informations de configuration pour l'extension donn�e (les m�mes informations retourn�es par la fonction phpinfo()). Disponible depuis PHP 5.2.2. Les informations de configurations internes sont disponibles en utilisant le nom d'extension "main".

Exemple #7 Exemple avec --ri

$ php --ri date

date

date/time support => enabled
"Olson" Timezone Database Version => 2007.5
Timezone Database => internal
Default timezone => Europe/Oslo

Directive => Local Value => Master Value
date.timezone => Europe/Oslo => Europe/Oslo
date.default_latitude => 59.22482 => 59.22482
date.default_longitude => 11.018084 => 11.018084
date.sunset_zenith => 90.583333 => 90.583333
date.sunrise_zenith => 90.583333 => 90.583333

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 � ce 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 :

Exemple #8 Script pr�vu pour �tre ex�cut� en ligne de commande (script.php)

<?php

if ($argc != || in_array($argv[1], array('--help''-help''-h''-?'))) {
?>

C'est une ligne de commande � une option.

Utilisation :
<?php echo $argv[0]; ?> <option>

<option> peut �tre un mot que vous souhaitez afficher.
Avec les options --help, -help, -h,
et -?, vous obtiendrez cette aide.

<?php
} else {
  echo 
$argv[1];
}
?>

Dans le script ci-dessus, nous utilisons la premi�re ligne pour indiquer que le fichier doit �tre ex�cut� par PHP. Nous travaillons avec une version CLI, donc aucun en-t�te HTTP n'est affich�. Il y a deux variables que vous pouvez utiliser avec les applications de ligne de commande : $argc et $argv. La premi�re est le nombre d'arguments plus un (le nom du script qui est ex�cut�). La seconde est un tableau contenant les arguments, commen�ant avec le nom du script en �l�ment 0 ($argv[0]).

Dans notre exemple, nous avons v�rifi� qu'il y a plus ou moins d'un argument. De plus, si cet argument est --help, -help, -h ou -?, nous affichons un message d'aide, ainsi que le nom du script. Si nous recevons un autre argument, celui-ci est affich� 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 :

Exemple #9 Fichier batch pour ex�cuter un script PHP en ligne de commande (script.bat)

@echo OFF
"C:\php\php.exe" script.php %*

Si vous avez nomm� le programme ci-dessus script.php, et que vous avez votre ex�cutable php.exe situ� � 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 vos applications en ligne de commande.