Différence avec les autres SAPIs

Les différences les plus notables entre le CLISAPI et les SAPI sont :

  • Contrairement au CGISAPI, aucun en-tête HTTP n'est écrit dans le résultat.

    Bien que le CGISAPI fournisse un moyen de supprimer les en-têtes HTTP, il n'est pas possible d'activer les en-têtes HTTP dans le CLISAPI.

    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 CLISAPI, car elles n'ont pas de sens en environnement shell :

    Directives php.ini ignorées
    DirectiveValeur par défaut pour CLISAPICommentaire
    html_errorsfalse 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_flushtrue 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_time0 (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_argvtrue

    La définition à true de cette directive signifie que les scripts exécutés via le SAPICLI 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 SAPICLI. Ces valeurs peuvent également être trouvées dans la variable $_SERVER, par exemple : $_SERVER['argv'].

    output_bufferingfalse

    Même si cette configuration INI est codée en dur à false, les fonctions relatives à l'affichage du buffer sont disponibles.

    max_input_timefalse

    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 CLISAPIne transforme pas le dossier courant en dossier d'exécution du script.

    Exemple #1 Exemple montrant la différence avec le SAPICGI :

    <?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 CLISAPI, 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 CGISAPI se comporte de la même façon que le CLISAPI, en lui passant l'option -C, lorsque vous l'invoquez en ligne de commande.

To Top