Diferenças em relação a outros SAPIs

Diferenças notáveis do CLISAPI em comparação com outros SAPIs:

  • Diferente do CGISAPI, nenhum cabeçalho é enviado para a saída.

    Embora o CGISAPI forneça uma maneira de suprimir os cabeçalhos HTTP, não existe nenhum forma equivalente de habilitá-los no CLISAPI.

    CLI é inicializado no modo silencioso por padrão, embora as chaves -q e --no-header são mantidas por compatibilidade para que seja possível usar scripts CGI antigos.

    Ele não altera o diretório atual para aquele no qual o script está sendo executado (As opções -C and --no-chdir são mantidas por compatibilidade)

    Mensagens de erro em texto plano (sem formatação HTML).

  • Existem certas diretivas do php.ini que são sobrescritas pelas do CLISAPI porque elas não fazem sentido em um ambiente de linha de comando:

    Diretivas do php.ini sobrescritas
    DiretivaValor padrão do CLISAPIComentário
    html_errorsfalse Tem como padrão false, já que pode ser bem difícil ler mensagens de erro na linha de comando quando elas estão misturadas com tags HTML não interpretadas.
    implicit_flushtrue Em um ambiente de linha de comando, é geralmente desejado para a saída, como a partir de print, echo e similares, que elas sejam exibidas imediatamente, e não mantidas em um buffer. Apesar disso, ainda é possível usar output buffering para atrasar ou manipular a saída padrão.
    max_execution_time0 (unlimited) O PHP em um ambiente de linha de comando tende a ser usado com um número de propostas muito mais diversas do que para aplicações web típicas, e como essas formas podem ter muito mais longevidade, o tempo máximo de execução é definido como sem limite.
    register_argc_argvtrue

    Definir isso como true significa que o script executado a partir do CLISAPI sempre terá acesso ao argc (número de argumentos passados para a aplicação) e argv (array contendo os valores dos argumentos).

    As variáveis $argc e $argv do PHP são automaticamente definidas com seus valores apropriados quando usando o CLISAPI. Esses valores podem também ser encontrados no array $_SERVER, por exemplo: $_SERVER['argv'].

    output_bufferingfalse

    Apesar do valor no php.ini ser explicitamente definido como false, as funções de Output buffering estão disponíveis.

    max_input_timefalse

    O PHP CLI não suporta GET, POST ou upload de arquivos.

    Nota:

    Essas diretivas não podem ser inicializadas com outro valor no arquivo de configuração php.ini ou um valor personalizado (caso seja especificado). Essa limitação ocorre pois os valores são aplicados depois que todos os arquivos de configuração foram lidos. Entretanto, seus valores podem ser alterados em tempo de execução (porém isso não se aplica a todos eles como register_argc_argv).

    Nota:

    É recomendado definir ignore_user_abort para aplicações de linha de comando. Veja ignore_user_abort() para mais informações.

  • Para facilitar o trabalho em ambientes de linha de comando, um número de constantes é definido para I/O streams.

  • O CLISAPInão altera o diretório de trabalho para o diretório de onde o arquivo é executado.

    Exemplo #1 Exemplo demonstrando a diferença entre CGI e SAPI:

    <?php
    // Um script de teste simples chamado test.php
    echo getcwd(), "\n";
    ?>

    Quando é utilizada a versão CGI a saída é:

     $ pwd /tmp $ php -q another_directory/test.php /tmp/another_directory 

    Isso demonstra claramente que o PHP altera o diretório de trabalho para o diretório onde o arquivo é executado.

    Usando o CLISAPI temos:

     $ pwd /tmp $ php -f another_directory/test.php /tmp 

    Isso permite grande flexibilidade no desenvolvimento de ferramentas de linha de comando em PHP.

    Nota:

    O CGISAPI suporta esse comportamento do CLISAPI através da opção -C utilizada quando executado a partir da linha de comando.

To Top