Le langage PHP peut être utilisé pour scripter des fichiers exécutables en ligne de commande, au même titre que PERL (ou autres…). Ce mode de fonctionnement est pratique pour outrepasser les limites imposées par l’environnement d’Apache (sécurité, temps d’exécution, etc.).

Avant d’écrire du code, il est nécessaire de définir l’emplacement de l’interpréteur PHP (à noter que PHP est déjà installé sur votre machine). Pour se faire, il suffit d’exécuter la commande suivante (sous Linux): whereis php. Dans la majorité des cas, le résultat devrait contenir soit /usr/bin/php, soit /usr/local/bin/php. La première ligne du script devra tjs. reprendre l’emplacement de php, comme ci-après:
#!/usr/bin/php
Ensuite, vous pouvez écrire en PHP habituel, sans omettre les <?php ?> en début et fin de script.
Ci-après, un exemple de script qui affiche “Hello World” au prompt:
#!/usr/bin/php
<?php
echo "Hello World\n";
?>

Pour tester ce script (nommé ici test.php), il suffit de le rendre exécutable et de l’appeler comme une commande:
chmod 755 test.php
./test.php

Comment récupérer des arguments passer en ligne de commande?

Etant donné que le script PHP est désormais exécuté hors de l’environnement Apache, les arguments en ligne de commande sont la seule méthode qui permet de lui passer des paramètres (les variables POST/QueryString n’existent plus, tout comme les constantes d’environnement $SERVER). La variable (tableau) $argv permet de récupérer ces valeurs.
Ci-après, un exemple de script qui affiche “Hello World” suivi des arguments passés en ligne de commande:
#!/usr/bin/php
<?php
echo "Hello World $argv[0] $argv[1] $argv[2]\n";
?>

Le script est appelé ainsi (2 paramètres dans notre cas, l’index 0 retourne le nom du script): ./test.php Param1 Param2
Résultat: Hello World ./test.php Param1 Param2
A noter que $argv n’est pas limité à 2 paramètres, voir la doc de PHP à ce sujet.

Comment appeler un autre script (ou commande)?

Deux fonctions PHP existent pour exécuter un autre script ou commande:

  • passthru() : exécute et affiche le résultat brut
  • exec(): exécute sans afficher le résultat