Le CLI SAPI dispose de trois moyens pour lire le code du script PHP que vous voulez exécuter :
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.
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.
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
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
#!/usr/bin/php
<?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 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 à 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 #2 Script prévu pour être exécuté en ligne de commande (script.php)
#!/usr/bin/php
<?php
if ($argc != 2 || 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 #3 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 CLI 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.
Si vous êtes sous Windows, Php peut être configuré pour fonctionne 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.