Por que a versão do PHP é diferente no phpinfo () e na CLI?


27

Percebi que há uma falta de correspondência entre a versão PHP relatada por phpinfo()e php -v(na CLI).

phpinfo():  5.5.24
php -v: 5.6.9

Estou trabalhando no Mac OS X 10.10 (Yosemite) e instalei uma biblioteca ( php-version) para tentar gerenciar as versões do PHP.

Ele me relata três versões diferentes instaladas no meu laptop:

  5.4.41
  5.5.25
* 5.6.9

Gostaria de definir a mesma versão do PHP no Apache e na CLI.

Como posso dizer ao Apache qual versão do PHP usa?

Eu tentei escrever esta linha no meu httpd.conf:

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

Então:

sudo apachectl restart

Mas tudo isso não resolve o problema… Nas minhas informações em PHP ainda tenho: 5.5.24



1
@bertieb Pergunta é realmente semelhante à outra. Acabei de responder , mas há um problema específico aqui que tentarei responder também.
precisa saber é o seguinte

Respostas:


14

Aqui estão alguns problemas diferentes, todos escondidos sob o conceito de confusão da versão do PHP, portanto, tentaremos abordar cada um o mais claramente possível. Primeiro isso:

Percebi que há uma falta de correspondência entre a versão PHP relatada por phpinfo()e php -v(na CLI).

phpinfo():  5.5.24
php -v: 5.6.9

A CLI do PHP não é igual ao módulo PHP Apache.

Como explico na resposta a essa outra pergunta aqui , não entre em pânico! Se você está preocupado com a versão do PHP que o servidor Apache está usando, a saída de phpinfo()é sempre o que você deve prestar atenção. O módulo PHP Apache e o binário da linha de comando PHP são duas coisas diferentes que não interferem uma na outra.

Preste atenção à saída de phpinfo()se você estiver preocupado em definir a versão correta do módulo PHP no Apache.

Dito isto, você ainda parece ter problemas para carregar o módulo PHP correto no Apache:

Eu tentei escrever esta linha no meu httpd.conf:

LoadModule php5_module    /usr/local/opt/php56/libexec/apache2/libphp5.so

Verifique se o servidor Apache está carregando o módulo PHP correto.

Enquanto o que você fez tecnicamente parece estar correto, a única razão pela qual vejo isso não funcionar é que, de alguma forma, há outra LoadModule php5_modulediretiva nos arquivos de configuração do Apache que está substituindo o valor que você está definindo nessa linha.

Eu recomendaria examinar o httpd.conf- que eu suponho que esteja localizado aqui /etc/apache2/httpd.conf- e ver se talvez exista outro LoadModule php5_moduleque você tenha perdido ou não percebeu ao editar esse arquivo. Observando meu arquivo equivalente no Mac OS X 10.9.5, vejo que a linha está comentada - já que não uso as configurações Apache / PHP do Mac OS X - e lê algo como isto:

#LoadModule php5_module libexec/apache2/libphp5.so

Claro que no seu caso seria descomentado. Mais detalhes sobre a configuração do Apache e PHP para desenvolvimento web podem ser encontrados neste site .

Considere seriamente o uso do MAMP como uma alternativa às peculiaridades do Mac OS X Apache / PHP.

Agora tudo isso dito, eu não sei o que você está tentando fazer, mas se você estiver desenvolvendo a Web em um sistema Mac OS X, considere seriamente usar o MAMP em vez de invadir a pilha da Web principal do Mac OS X para obter as coisas corrida.

O benefício do MAMP é um nível de produção extremamente equivalente ao Mac OS X de uma pilha LAMP. E como é voltado para o desenvolvimento da Web no mundo real, ele possui todos os módulos e configurações exatamente como se deve configurá-los.

O principal problema do Apache e PHP no Mac OS X é que o software normalmente está desatualizado, uma dor para configurar / ajustar e gerenciar e uma dor de cabeça para depurar quando coisas assim acontecem. E se surgir uma atualização do Mac OS X que elimine suas configurações cuidadosamente Apache e PHP? Você voltou à estaca zero.


Por que você respondeu a esse duplicado em vez de marcar a pergunta como duplicada?
Pmpr

@Trix Porque essa “duplicata” é uma resposta semelhante a uma pergunta diferente postada dentro de dias uma da outra. Como respondo a um comentário semelhante aqui , “@bertieb Question é realmente semelhante ao outro. Acabei de responder, mas há um problema específico aqui que tentarei responder também. - JakeGould 12 / set / 15 às 0:42 ”Uma pergunta é sobre a diferença entre o PHP na linha de comando. O outro é sobre os problemas do módulo AND PHP.
precisa saber é o seguinte

4

Encontrei a solução para o meu problema. Após a edição, /etc/apache2/httpd.confeu costumava reiniciar o apache usando:

sudo apachectl restart

Por alguma razão, usando este comando, o Apache não buscava as atualizações httpd.confe carregava a configuração antiga.

Usando:

sudo apachectl -k stop
sudo apachectl -k start

Faça uma espécie de reinicialização total de todos os serviços e também leia as atualizações no arquivo de configuração e, finalmente, leia o novo caminho para php5_module:

/usr/local/opt/php56/libexec/apache2/libphp5.so

Agradeço também a @JakeGould por sua explicação .


Editou a postagem para remover o -ksinalizador dos apachectlcomandos, pois se você verificar apachectl -hque o sinalizador / opção não existe lá. Não faço ideia de onde você tirou isso. Além disso, enquanto você declara fazer stope startesclarecer as coisas, o mais estranho é que restartnos sistemas Linux faz exatamente isso. Se você verificar o script localizado em /usr/sbin/apachectl(é um script, use qualquer editor de texto para visualizá-lo), ele parece fazer exatamente isso também. Talvez no Mac OS X o LaunchDaemonsApache seja apenas “estranho” quando comparado ao Linux padrão? Enfim, ótimo que você resolveu isso.
JakeGould 12/09/2015

Só para sua informação eu encontrei o comando com a opção -k aqui: httpd.apache.org/docs/2.2/stopping.html
Salvatore DiBenedetto

Você está certo. Eu olhei através da saída "help" de /usr/sbin/apachectl(sem nenhum comando) e afirma claramente [-k start|restart|graceful|graceful-stop|stop],. Estou tão acostumado com a maneira como o Apache funciona nos sistemas Linux agora parece que eu esqueci a -kbandeira para usar com apachectlcomandos. Portanto, sabendo que o verdadeiro problema que você teve é ​​que você estava tentando reiniciar com este comando sudo apachectl restartquando deveria ter o -ksinalizador adicionado dessa maneira sudo apachectl -k restart.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.