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:
Diretiva | Valor padrão do CLISAPI | 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 CLISAPI. 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 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.