Por que o phpinfo () mostra a versão 5.5.9, mas o php -v mostra a versão 7.0

2

Estou executando o ubuntu na caixa vagrant e estou executando com sucesso e desenvolvendo aplicativos LAMP.

FUNDO: Estou tentando instalar o laravel com o compositor e obter "a extensão solicitada do PHP mbstring está faltando no seu sistema".

Meu diretório /etc/php contém dois diretórios dentro dele: 7.0 e 7.1

No entanto, quando executo um arquivo com phpinfo() , ele informa que estou executando PHP Version 5.5.9-1ubuntu4.20

Mas a execução de php -v diz que estou executando a versão 7.0.14:

root@vagrant-ubuntu-trusty-64:/var/www/homebase/src# php -v
PHP 7.0.14-2+deb.sury.org~trusty+1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.14-2+deb.sury.org~trusty+1, Copyright (c) 1999-2016, by Zend Technologies

PERGUNTA: Por que estou vendo a discrepância?

    
por Oliver Williams 22.01.2017 / 04:42

3 respostas

1

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 ...

    
por 22.01.2017 / 11:43
0

Eu suspeito (eu não tenho uma caixa do Ubuntu para checar) que o problema está relacionado à diferença entre o php-cgi e o php direto usado pela linha de comando. Parece que o Ubuntu usa phpX-cgi quando você instala a pilha LAMP. A versão cgi usa um arquivo php.ini e isso pode complicar ainda mais, já que isso mudará o caminho para o cwd.

    
por 22.01.2017 / 10:13
0

phpinfo() mostra a versão do módulo PHP do Apache, que é fornecida por libapache2-mod-php . Você precisa atualizar isso (ou instalar uma das versões específicas, como libapache2-mod-php7.1 ).

    
por 22.01.2017 / 10:17

Tags