Différences avec les autres SAPIs

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'est pas possible 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 redĂ©finies par le CLI SAPI, car elles n'ont pas de sens en environnement shell :

    Directives php.ini redéfinies
    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 pour 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 à true de cette directive signifie que les scripts exécutés via le SAPI CLI 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 SAPI CLI. Ces valeurs peuvent Ă©galement ĂȘtre trouvĂ©es dans la variable $_SERVER, par exemple : $_SERVER['argv'].

    Avertissement

    La prĂ©sence de $argv ou $_SERVER['argv'] n'est pas une indication fiable qu'un script est exĂ©cutĂ© depuis la ligne de commande, car ces variables peuvent ĂȘtre dĂ©finies dans d'autres contextes lorsque register_argc_argv est activĂ©. La valeur retournĂ©e par php_sapi_name() devrait ĂȘtre vĂ©rifiĂ©e Ă  la place.

    <?php

    if (php_sapi_name() === 'cli') {
    echo
    "Ce script est exécuté depuis la ligne de commande !\n";
    }
    Avertissement

    Cette fonctionnalité est OBSOLÈTE à partir de PHP 8.5.0. Dépendre de cette fonctionnalité est fortement déconseillé.

    output_buffering false

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

    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";
    ?>

    Lors de l'utilisation de 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 lors de la rédaction de 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, lorsqu'il est invoquĂ© en ligne de commande.

add a note

User Contributed Notes

There are no user contributed notes for this page.