Estou no Linux Mint e tinha o PHP 8.1 por padrão, mas preciso instalar o PHP 8.3.
Removi o PHP 8.1 existente com apt-get remove php.
Entretanto, quando executo o comando php ainda vejo o PHP 8.1.
Não deveria receber "comando não encontrado" se o php foi de fato removido?
Para responder à pergunta real:
php
no seu sistema provavelmente há um metapacote (certamente é um metapacote no Ubuntu - e provavelmente é um metapacote no Linux Mint também).Um metapacote é um pacote que basicamente inclui/instala dependências. O que de certa forma significa que os pacotes "reais" que são trazidos pelo metapacote são "escondidos" atrás do nome genérico do metapacote (nesse caso
php
).Se eu fosse inspecionar
php
as dependências do no Ubuntu, descobriria quesudo apt install php
na verdade instala ophp8.3
, poisphp
depende dephp8.3
:Por outro lado (e é por isso que
sudo apt remove php
não estou removendo o PHP),sudo apt-remove php
não removeria nada além dophp
metapacote, deixandophp8.3
instalado:E para remover o PHP 8.3, eu deveria executar
sudo apt-remove php8.3
:Certo?
Errado! As também
php8.3
é um metapacote que depende, transitivamente, de , que é o pacote que realmente fornece o executável.php8.3-cli
php
Acho que você entendeu a essência.
Cada metapacote na cadeia de dependências cria um nível de indireção e dificulta o acesso ao "negócio real"; neste caso,
php8.3-cli
seria o último na cadeia (removê-lo pelo menos faria comphp -v
que a linha de comando falhasse), no entanto, a remoçãophp8.3-cli
provavelmente ainda deixaria alguns pacotes instalados porsudo apt install php
aí.No geral,
sudo apt remove php8.3-cli
seguido porsudo apt autoremove
talvez se livrar de tudo (assumindo que nada mais dependa dos pacotes restantes, é claro).Algumas respostas na internet sugerem executar comandos como
sudo apt remove 'php8.3*'
, que sim, essencialmente removerão pelo menos a maior parte do quesudo apt install php
foi instalado.No entanto, passei a não gostar desse método, porque você precisa ter muito cuidado ao inspecionar quais pacotes serão removidos como parte do processo de remoção (qualquer coisa que dependa de um pacote correspondente ao glob será desinstalado) e, como hoje em dia o armazenamento geralmente não é um problema, costumo jogar pelo seguro e simplesmente não me incomodar.
Em vez disso, se o PHP 8.3 não estiver disponível na sua instalação, eu usaria um PPA conforme descrito na sua resposta e instalaria o PHP 8.3 junto com o PHP 8.1. O processo de instalação gerenciará alternativas e as coisas simplesmente funcionarão (principalmente - o exemplo mais gritante do que não funcionará imediatamente é o PHP com Apache - se você estiver usando PHP com Apache, o Apache precisará ser reconfigurado para carregar a nova versão
mod_php
viaa2enmod
/a2dismod
, caso contrário, a versão mais antiga do módulo ainda será carregada).executando
apt update and apt upgrade
após seguir https://medium.com/@nothanjack/how-to-run-php-8-3-on-linux-mint-21-a-comprehensive-tutorial-23df8b03e620 configurei meu PHP para 8.3: