Diferenças notáveis do CLI SAPI em comparação com outros SAPIs:
Diferente do CGI SAPI, nenhum cabeçalho é enviado para a saída.
Embora o CGI SAPI forneça uma maneira de suprimir os cabeçalhos HTTP, não existe nenhum forma equivalente de habilitá-los no CLI SAPI.
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 CLI SAPI porque elas não fazem sentido em um ambiente de linha de comando:
Diretiva | Valor padrão do CLI SAPI | Comentário |
---|---|---|
html_errors | false |
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_flush | true |
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_time | 0 (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_argv | true |
Definir isso como As variáveis $argc e $argv do PHP são automaticamente definidas com seus valores apropriados quando usando o CLI SAPI. Esses valores podem também ser encontrados no array $_SERVER, por exemplo: $_SERVER['argv']. |
output_buffering | false |
Apesar do valor no php.ini ser explicitamente definido como |
max_input_time | false |
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 CLI SAPI nã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 CLI SAPI 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 CGI SAPI suporta esse comportamento do CLI SAPI através da opção -C utilizada quando executado a partir da linha de comando.