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 :
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 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 à 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 à |
max_input_time | FALSE |
Le PHP CLI ne supporte pas GET, POST et le téléchargement de fichiers. |
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).
Note:
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 #1 Exemple montrant la différence avec le SAPI CGI :
<?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 -q 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.