Why am I seeing the discrepancy?
no tempo de compilação ( make
) - a configuração de origem do PHP aciona múltiplos SAPIs a serem construídos. Por exemplo, php-cli
, php-cgi
, php-debug
e outros, dependendo da sua configuração de compilação.
Nota: talvez você não consiga acessar as opções de configuração de tempo de compilação com a versão empacotada debian ou ubuntu do PHP como os mantenedores de pacotes tinham - no passado (não tenho certeza se ainda se aplica) - feitas alterações que suprimem a impressão do configurações de tempo de compilação (usando php-config
), consulte: link
Caso contrário, cada SAPI é um executável binário que fornece um ponto de interação para qualquer coisa que queira executar código PHP no interpretador PHP.
Durante o make install
ou checkinstall --pkgname=php-self-compiled
ou a configuração do pacote, esses SAPI serão colocados em locais diferentes em seu sistema de arquivos.
O cli SAPI - que você obtém quando executa php -v
, provavelmente será colocado em algum lugar como /bin/php
ou /usr/bin/php
e o cgi SAPI será iniciado como um daemon (como parte do subsistema webserving) na inicialização por meio de um init script ou systemd.
Portanto, um servidor da Web que deseja executar um script PHP usará uma instância pré-ativada de um php-cgi
SAPI e passará a ele um script a ser executado. Este SAPI terá sua própria configuração de tempo de execução (visível por um lançamento de seu servidor com strace
.)
Se você executar php
a partir da linha de comando, obterá um SAPI diferente, possivelmente com sua própria configuração de tempo de execução, novamente, isso pode ser confirmado com strace php -v
.
Cada SAPI - geralmente - é originado da mesma operação de compilação e, portanto, compartilha muitas configurações de tempo de compilação (como quais extensões adicionar e se devem ser compiladas estáticas ou vinculadas em tempo de execução), bem como número de versão etc.
É por isso que você obtém comportamentos quando tenta testar a configuração do PHP que são semelhantes o suficiente para fazer você pensar que eles são o mesmo programa, mas ainda são inconsistentes em alguns aspectos, são programas separados que compartilham muitos dos mesmos objetos sob o capô , mas têm configurações diferentes e são projetadas para servir ambientes diferentes, por exemplo, quando o PHP-cli (que é o que o compositor executa) imprime mensagens de erro, ele espera que elas sejam impressas no terminal, para que ele imprima texto simplesphp-fpm
, ou php-cgi
imprime o mesmo erro que irá envolvê-lo em HTML, porque ele pressupõe que ele esteja interagindo com algum processo relacionado à web. php-debug novamente esperará ser interfaceado de forma diferente, receber conexões de dados na porta 9000 etc ...