PHP Instalar no Linux

No Linux, instalar o PHP é um comando só: o PHP vem pronto nos repositórios de todas as distribuições. Nesta aula você vai instalar o PHP de linha de comando no Ubuntu, no Debian, no Fedora e no Arch, acrescentar extensões (pedaços opcionais, como o suporte a acentos e ao SQLite), conferir se tudo deu certo e descobrir onde fica o arquivo de configuração, o php.ini.

Você vai aprender
  • Descobrir se o PHP já está instalado.
  • Instalar com apt (Ubuntu e Debian), dnf (Fedora) e pacman (Arch).
  • Por que pedir o pacote php-cli, e não o php sozinho.
  • O que são extensões, como listá-las (php -m) e como instalar as que faltam.
  • Onde fica o php.ini (php --ini) e por que as mensagens de erro mudam de um computador para outro.
Não quer instalar nada agora?

Tudo bem. As caixas Experimente do guia rodam o PHP 8.5 no navegador, e o Nível 1 inteiro pode ser feito sem instalar nada. Volte a esta aula quando quiser rodar o PHP no seu computador. Usa Windows ou macOS? Veja Instalar no Windows e macOS.


A ideia: a loja de aplicativos do Linux

No celular, você instala aplicativos pela loja (Play Store, App Store), sem procurar instaladores na internet. O Linux tem isso há muito mais tempo: o gerenciador de pacotes. Cada distribuição mantém um grande catálogo de programas, os pacotes, já testados e prontos para aquela distribuição. Você pede pelo nome, e o gerenciador baixa, instala e depois mantém o programa atualizado junto com o resto do sistema.

DistribuiçãoGerenciador de pacotes
Ubuntu, Debian, Linux Mint, Pop!_OSapt
Fedora, Red Hat, Rocky, AlmaLinuxdnf
Arch, Manjaro, EndeavourOSpacman

Instalar programas mexe no sistema inteiro, então esses comandos precisam de permissão de administrador: por isso começam com sudo ("faça como administrador"), que pede a sua senha.


1. O PHP já está instalado?

Antes de instalar, pergunte ao próprio PHP. Abra o terminal e digite:

$ php -v

Se aparecer algo começando com PHP 8., ele já está instalado (veja o que cada parte quer dizer em Versões do PHP) e você pode pular para a seção de extensões. Se não estiver, o Ubuntu responde assim (saída real do Ubuntu 26.04):

Comando 'php' não encontrado, mas poder ser instalado com:
sudo apt install php8.5-cli  # version 8.5.4-0ubuntu1.1, or
sudo apt install php-cli     # version 2:8.5+99ubuntu1

(O "poder ser" é um erro de digitação da própria tradução do Ubuntu.) O Ubuntu já sugere o comando de instalação. Em outras distribuições, a mensagem é a do Bash, mais seca:

bash: php: comando não encontrado

2. Ubuntu e Debian: apt

Qual versão vou receber?

Antes de instalar, dá para perguntar ao apt que versão ele tem no catálogo. O comando apt-cache policy mostra a versão instalada e a candidata (a que seria instalada). Não precisa de sudo, porque só consulta:

$ apt-cache policy php8.5-cli
php8.5-cli:
  Instalado: (nenhum)                   « ainda não está instalado
  Candidato: 8.5.4-0ubuntu1.3           « a versão que o apt instalaria
  Tabela de versão:
     8.5.4-0ubuntu1.3 500
        500 http://archive.ubuntu.com/ubuntu resolute-updates/main amd64 Packages
        500 http://security.ubuntu.com/ubuntu resolute-security/main amd64 Packages
     8.5.4-0ubuntu1 500
        500 http://archive.ubuntu.com/ubuntu resolute/main amd64 Packages

No Ubuntu 26.04 (de codinome resolute), o PHP é o 8.5.4. O -0ubuntu1.3 do fim é a "revisão" do Ubuntu: o 8.5.4 com as correções de segurança que o Ubuntu foi aplicando (veja a nota sobre distribuições em Versões do PHP). A versão 8.5.4-0ubuntu1 é a original do lançamento do Ubuntu; a 1.3 veio depois, pelos repositórios de atualização (-updates) e de segurança (-security).

O php-cli (sem número) é um pacote "apelido" que sempre aponta para a versão padrão da distribuição:

$ apt-cache policy php-cli
php-cli:
  Instalado: (nenhum)
  Candidato: 2:8.5+99ubuntu1            « "8.5": aponta para o php8.5-cli
  Tabela de versão:
     2:8.5+99ubuntu1 500
        500 http://archive.ubuntu.com/ubuntu resolute/main amd64 Packages
        500 http://archive.ubuntu.com/ubuntu resolute/main i386 Packages

Instalando

São dois comandos. O primeiro atualiza o catálogo (a lista do que existe nos repositórios); o segundo instala:

sudo apt update
sudo apt install php-cli
sudo
Roda o comando como administrador. Pede a sua senha (nada aparece enquanto você digita; é normal).
apt update
Baixa a lista atualizada de pacotes. Não instala nada.
apt install
Instala os pacotes pedidos e tudo de que eles dependem.
php-cli
O PHP de linha de comando (Command Line Interface). É ele que traz o comando php e o servidor embutido php -S. Pode trocar por php8.5-cli para pedir a versão exata.

Quer ver o que vai ser instalado sem instalar nada? A opção -s (de simulate, "simular") do apt-get faz um ensaio, e funciona até sem sudo. Veja o ensaio real no Ubuntu 26.04:

$ apt-get -s install php-cli
NOTA: Esta é apenas uma simulação!
      apt-get precisa de privilégios de root para execução real.
      Lembre-se também de que a trava está desativada e,
      portanto, não dependa da relevância para a situação real atual!
Lendo listas de pacotes...
Construindo árvore de dependências...
Lendo informação de estado...
Resolvendo dependências...
Os pacotes adicionais a seguir serão instalados:
  php-common php8.5-cli php8.5-common php8.5-readline
Pacotes sugeridos:
  php-pear
Os NOVOS pacotes a seguir serão instalados:
  php-cli php-common php8.5-cli php8.5-common php8.5-readline    « só 5 pacotes, todos do PHP
0 pacotes atualizados, 5 pacotes novos instalados, 0 a serem removidos e 12 não atualizados.
Inst php-common (2:99ubuntu1 Ubuntu:26.04/resolute [all])
Inst php8.5-common (8.5.4-0ubuntu1.3 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Inst php8.5-readline (8.5.4-0ubuntu1.3 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Inst php8.5-cli (8.5.4-0ubuntu1.3 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Inst php-cli (2:8.5+99ubuntu1 Ubuntu:26.04/resolute [all])
Conf php-common (2:99ubuntu1 Ubuntu:26.04/resolute [all])
Conf php8.5-common (8.5.4-0ubuntu1.3 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Conf php8.5-readline (8.5.4-0ubuntu1.3 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Conf php8.5-cli (8.5.4-0ubuntu1.3 Ubuntu:26.04/resolute-updates, Ubuntu:26.04/resolute-security [amd64])
Conf php-cli (2:8.5+99ubuntu1 Ubuntu:26.04/resolute [all])

As linhas Inst e Conf são o que o apt faria: instalar (install) e configurar cada pacote. Na instalação de verdade, com sudo apt install php-cli, aparece a mesma lista de pacotes novos, depois a pergunta Continuar? [S/n] (aperte Enter para aceitar) e as linhas de download e configuração.

PacoteO que traz
php8.5-cliO programa php em si.
php8.5-commonExtensões básicas (ctype, pdo, iconv, tokenizer…) e arquivos comuns a todas as formas de rodar o PHP.
php8.5-readlineEdição de linha (setas, histórico) no PHP interativo, o php -a.
php-cli, php-commonOs pacotes "apelido", que apontam para a versão 8.5.
Cuidado com apt install php (sem o -cli)

O pacote php sozinho foi pensado para servidores e puxa um servidor web inteiro junto. Veja o ensaio:

$ apt-get -s install php | grep -A3 "NOVOS"
Os NOVOS pacotes a seguir serão instalados:
  apache2 apache2-bin apache2-data apache2-utils libapache2-mod-php8.5
  libapr1t64 libaprutil1-dbd-sqlite3 libaprutil1-ldap libaprutil1t64 php
  php-common php8.5 php8.5-cli php8.5-common php8.5-readline

Veio o Apache (apache2), que fica ligado o tempo todo ocupando a porta 80, mesmo que você nunca o use. Para estudar, o php-cli basta: o servidor embutido (php -S) faz o papel do Apache. O motivo está nas dependências do pacote php8.5, que exige um destes três (a barra | quer dizer "ou"), e o apt escolhe o primeiro:

$ apt-cache depends php8.5 | head
php8.5
 |Depende: libapache2-mod-php8.5
 |Depende: php8.5-fpm
  Depende: php8.5-cgi
  Depende: php8.5-common

Conferindo

Terminada a instalação, o comando php passa a existir. No Ubuntu 26.04, a resposta do php -v é esta:

$ php -v
PHP 8.5.4 (cli) (built: Sep  2 2026 14:42:18) (NTS)
Copyright (c) The PHP Group
Built by Ubuntu                                « montado pelo Ubuntu
Zend Engine v4.5.4, Copyright (c) Zend Technologies
    with Zend OPcache v8.5.4, Copyright (c), by Zend Technologies

Compare com o PHP do laboratório do guia, que foi montado de outro jeito (por uma ferramenta chamada static-php-cli) e é uma versão de correção mais nova:

$ php -v
PHP 8.5.8 (cli) (built: Jul  7 2026 05:21:52) (NTS gcc 14.2.0)
Copyright (c) The PHP Group
Built by static-php-cli 2.8.6
Zend Engine v4.5.8, Copyright (c) Zend Technologies
    with Zend OPcache v8.5.8, Copyright (c), by Zend Technologies

Os dois são PHP 8.5 e se comportam igual em tudo o que o guia ensina.

E no Debian?

Os comandos são os mesmos: sudo apt update e sudo apt install php-cli. Muda a versão: o Debian 13 ("trixie") traz o PHP 8.4, e os pacotes se chamam php8.4-cli, php8.4-mbstring e assim por diante (o apelido php-cli aponta para o php8.4-cli, conforme packages.debian.org, consultado em 16/10/2026). O PHP 8.4 roda quase todo o guia; só os recursos com selo PHP 8.5+ (como o operador |>) não funcionam. No Debian, se o seu usuário não usa sudo, rode os comandos como root (su -). Ilustrativo: o laboratório do guia é um Ubuntu; os nomes de pacote do Debian foram conferidos no site oficial.


3. Fedora: dnf

No Fedora, o pacote também se chama php-cli:

sudo dnf install php-cli

O dnf mostra a lista de pacotes, pergunta Is this ok [y/N]: (aqui o padrão é "não": digite y e Enter) e instala. Conforme packages.fedoraproject.org (16/10/2026), o Fedora 44 e o 45 trazem o PHP 8.5.11, e o Fedora 43, o 8.4.26. O Fedora acompanha as versões de correção do PHP de perto. Depois, confira com php -v. Ilustrativo: não rodou no laboratório do guia.


4. Arch Linux: pacman

No Arch, o pacote é só php (ele já é o de linha de comando; o Apache e o PHP-FPM vêm em pacotes separados, php-apache e php-fpm):

sudo pacman -S php

O -S (maiúsculo) quer dizer "sincronizar": baixar do repositório e instalar. Conforme archlinux.org (16/10/2026), a versão é a 8.5.11. O Arch sempre tem a versão mais nova logo depois do lançamento. Ilustrativo: não rodou no laboratório do guia.

Resumo das distribuições

DistribuiçãoComandoVersão do PHP (out/2026)
Ubuntu 26.04sudo apt install php-cli8.5.4 (conferido no laboratório)
Debian 13sudo apt install php-cli8.4
Fedora 44 e 45sudo dnf install php-cli8.5.11
Fedora 43sudo dnf install php-cli8.4.26
Archsudo pacman -S php8.5.11
Quero o PHP 8.5 numa distribuição que tem uma versão mais antiga

Existem repositórios extras mantidos por voluntários que oferecem várias versões do PHP lado a lado: no Ubuntu e no Debian, o de Ondřej Surý (ppa:ondrej/php no Ubuntu, packages.sury.org no Debian); no Fedora e derivados, o de Remi Collet (rpms.remirepo.net). São muito usados em servidores, mas são repositórios de terceiros: siga as instruções do site de cada um. Para estudar, a versão da sua distribuição costuma bastar.


5. Extensões: as peças opcionais

O PHP é feito de um "núcleo" mais um monte de extensões: módulos que acrescentam funções. Por exemplo, a extensão mbstring traz as funções que lidam direito com acentos (mb_strtoupper, mb_strlen), e a pdo_sqlite permite usar o banco de dados SQLite. Algumas vêm sempre; outras são pacotes separados, para você instalar só o que precisa.

Quais extensões eu tenho? php -m

O -m (de modules, "módulos") lista as extensões carregadas. Logo depois do apt install php-cli, no Ubuntu 26.04, a lista é esta:

$ php -m
[PHP Modules]
calendar
Core
ctype
date
exif
FFI
fileinfo
filter
ftp
gettext
hash
iconv
json
lexbor
libxml
openssl
pcntl
pcre
PDO
Phar
posix
random
readline
Reflection
session
shmop
sockets
sodium
SPL
standard
sysvmsg
sysvsem
sysvshm
tokenizer
uri
Zend OPcache
zlib

[Zend Modules]
Zend OPcache

Repare no que não está na lista: mbstring, pdo_sqlite, sqlite3, mysqli, curl, xml, intl. O laboratório do guia, ao contrário, foi montado com 50 extensões, incluindo essas. Por isso, no seu Ubuntu, alguns exemplos das próximas aulas podem falhar até você instalar a extensão certa. Veja o que acontece com uma função da mbstring:

$ php -r 'echo mb_strtoupper("ação"), "\n";'
PHP Fatal error:  Uncaught Error: Call to undefined function mb_strtoupper() in Command line code:1
Stack trace:
#0 {main}
  thrown in Command line code on line 1

"Call to undefined function" = "chamada a uma função não definida". A função existe no PHP, mas mora numa extensão que não está instalada. (O Command line code aparece no lugar do nome do arquivo porque o código veio do -r.)

Instalando extensões

No Ubuntu e no Debian, cada extensão é um pacote php8.5-NOME (ou o apelido php-NOME, que aponta para a versão padrão). Para as duas mais usadas no guia:

sudo apt install php8.5-mbstring php8.5-sqlite3
$ apt-get -s install php-mbstring php-sqlite3 | grep -A3 NOVOS
Os NOVOS pacotes a seguir serão instalados:
  php-common php-mbstring php-sqlite3 php8.5-common php8.5-mbstring
  php8.5-sqlite3
0 pacotes atualizados, 6 pacotes novos instalados, 0 a serem removidos e 12 não atualizados.

(No ensaio, o php-common e o php8.5-common aparecem como novos porque o PHP ainda não estava instalado; num computador com o php-cli, só vêm as duas extensões.) O pacote liga a extensão sozinho; não precisa editar nada. Depois da instalação, as três extensões aparecem no php -m e a função funciona:

$ php -m | grep -E -i 'mbstring|sqlite'
mbstring
pdo_sqlite
sqlite3
$ php -r 'echo mb_strtoupper("ação"), "\n";'
AÇÃO

O pacote php8.5-sqlite3 traz duas extensões: a sqlite3 e a pdo_sqlite (o "motorista" do SQLite para o PDO, que o guia usa nas aulas de banco de dados).

Os nomes em cada distribuição

Para…ExtensãoUbuntu / DebianFedoraArch
Acentos em textosmbstringphp8.5-mbstringphp-mbstringjá vem no php
SQLitepdo_sqlite, sqlite3php8.5-sqlite3php-pdophp-sqlite
MySQL / MariaDBpdo_mysql, mysqliphp8.5-mysqlphp-mysqlndjá vem no php
XML e DOMdom, xml, simplexmlphp8.5-xmlphp-xmljá vem no php
Acessar outros sitescurlphp8.5-curljá vem no php-commonjá vem no php
Imagensgdphp8.5-gdphp-gdphp-gd
Idiomas e datas por paísintlphp8.5-intlphp-intljá vem no php
Arquivos .zipzipphp8.5-zipphp-pecl-zipjá vem no php

A coluna do Ubuntu foi conferida no catálogo do Ubuntu 26.04 (apt-cache search --names-only "^php8.5-" lista 75 pacotes); as do Fedora e do Arch, nos sites oficiais de pacotes, e são ilustrativas. No Arch, muitas extensões já vêm dentro do pacote php, mas desligadas: para ligar uma, edite o /etc/php/php.ini como administrador e apague o ; do começo da linha dela (por exemplo, ;extension=pdo_sqlite vira extension=pdo_sqlite).

Você pode conferir as extensões do PHP do navegador também. Rode a caixa abaixo: ela pergunta ao PHP se cada extensão está carregada.

<?php
echo "PHP " . PHP_VERSION . "\n";
var_dump(extension_loaded("mbstring"));
var_dump(extension_loaded("pdo_sqlite"));
var_dump(extension_loaded("extensao_que_nao_existe"));

O extension_loaded("…") pergunta "esta extensão está carregada?", e o var_dump mostra a resposta: bool(true) (sim) ou bool(false) (não). O PHP do navegador vem com as extensões que o guia usa; a aula O Editor do Guia diz exatamente quais.


6. O php.ini: a configuração do PHP

O PHP tem dezenas de ajustes: quanta memória um programa pode usar, se as mensagens de erro aparecem na tela, quanto tempo uma página pode demorar. Eles ficam num arquivo de texto chamado php.ini. Para descobrir onde ele está, use php --ini:

$ php --ini
Configuration File (php.ini) Path: "/usr/local/etc/php"
Loaded Configuration File:         (none)
Scan for additional .ini files in: "/usr/local/etc/php/conf.d"
Additional .ini files parsed:      (none)
Configuration File (php.ini) Path
A pasta onde o PHP procura o php.ini.
Loaded Configuration File
O arquivo que ele achou e carregou. No laboratório do guia é (none), "nenhum": esse PHP roda com os valores de fábrica.
Scan for additional .ini files in
Uma pasta com arquivos .ini extras, lidos depois do principal. É ali que as distribuições colocam um arquivinho para cada extensão.
Additional .ini files parsed
Os arquivos extras que foram lidos.

No Ubuntu, a pasta de procura é outra, e cada forma de rodar o PHP tem o seu próprio php.ini. A primeira linha abaixo é a real do PHP do Ubuntu 26.04; as outras são ilustrativas, porque mostram arquivos que o pacote cria ao ser instalado:

Configuration File (php.ini) Path: "/etc/php/8.5/cli"
Loaded Configuration File:         /etc/php/8.5/cli/php.ini
Scan for additional .ini files in: "/etc/php/8.5/cli/conf.d"
Additional .ini files parsed:      /etc/php/8.5/cli/conf.d/10-pdo.ini,
/etc/php/8.5/cli/conf.d/20-calendar.ini,
/etc/php/8.5/cli/conf.d/20-ctype.ini,
…
Arquivo (Ubuntu e Debian)Vale para
/etc/php/8.5/cli/php.iniO comando php no terminal e o php -S.
/etc/php/8.5/fpm/php.iniSites servidos pelo nginx com PHP-FPM.
/etc/php/8.5/apache2/php.iniSites servidos pelo Apache com o módulo do PHP.
/etc/php/8.5/cli/conf.d/20-mbstring.iniUm arquivo por extensão; contém só extension=mbstring.so.

Um detalhe que confunde muita gente: mudar o php.ini do cli não muda o do site, e vice-versa. Em Fedora e Arch há um só: /etc/php.ini (Fedora) e /etc/php/php.ini (Arch).

Por que as mensagens de erro mudam de um computador para outro

Este arquivo tem um erro de propósito: usa a variável $nome sem ter criado:

<?php
echo "Olá, $nome!\n";

No laboratório do guia (sem php.ini), o aviso sai assim:

$ php aviso.php

Warning: Undefined variable $nome in /home/ana/site/aviso.php on line 2
Olá, !

No Ubuntu, com o php.ini que vem no pacote, o mesmo arquivo dá:

$ php aviso.php
PHP Warning:  Undefined variable $nome in /home/ana/site/aviso.php on line 2   « começa com "PHP "
Olá, !

A mensagem é a mesma; o que mudou foi por onde ela saiu. O php.ini do Ubuntu é a versão "de produção" (pensada para servidores de verdade): ele desliga a exibição de erros na saída (display_errors = Off) e liga o registro de erros (log_errors = On). No terminal, o "registro" vai para a saída de erros, com o prefixo PHP e dois espaços depois dos dois-pontos. Em sites, isso evita que visitantes vejam detalhes internos. A aula Lendo Erros do PHP explica os dois formatos.

Para estudar, é melhor ver os erros sempre. O próprio pacote do Ubuntu traz um modelo "de desenvolvimento", o php.ini-development. Para usar no terminal:

sudo cp /usr/lib/php/8.5/php.ini-development /etc/php/8.5/cli/php.ini

Com ele, o PHP mostra o aviso duas vezes: uma pela exibição (Warning:) e outra pelo registro (PHP Warning:). Parece estranho, mas é o normal em desenvolvimento no terminal:

$ php aviso.php
PHP Warning:  Undefined variable $nome in /home/ana/site/aviso.php on line 2

Warning: Undefined variable $nome in /home/ana/site/aviso.php on line 2
Olá, !
Uma configuração só para um comando

Sem mexer no php.ini, a opção -d muda um ajuste só naquela execução: php -d display_errors=On aviso.php. E, a partir do PHP 8.5, php --ini=diff PHP 8.5+ lista só os ajustes que estão diferentes do valor de fábrica. No laboratório:

$ php --ini=diff
Non-default INI settings:
html_errors: "1" -> "0"
implicit_flush: "0" -> "1"
max_execution_time: "30" -> "0"

Mesmo sem php.ini, o PHP de linha de comando já muda três valores: desliga o HTML nas mensagens de erro, manda a saída na hora e tira o limite de tempo (que é de 30 segundos nas páginas).


7. O teste final: o primeiro arquivo

Com o PHP instalado, crie uma pasta, um arquivo e rode:

$ mkdir -p site && cd site
$ cat > ola.php <<'FIM'
> <?php
> echo "Olá, mundo!\n";
> FIM
$ php ola.php
Olá, mundo!

O cat > ola.php <<'FIM' é um jeito de criar um arquivo pelo terminal: tudo o que você digita até a palavra FIM vai para dentro do ola.php (os > no começo das linhas são o terminal pedindo a continuação). Você também pode criar o arquivo num editor de código; a aula Editores e IDEs mostra como, e a aula Olá, Mundo explica cada linha.

Atualizando

Como o PHP veio do gerenciador de pacotes, ele é atualizado junto com o resto do sistema: sudo apt update && sudo apt upgrade (Ubuntu e Debian), sudo dnf upgrade (Fedora), sudo pacman -Syu (Arch). Para remover: sudo apt remove php-cli php8.5-cli, sudo dnf remove php-cli, sudo pacman -R php.


Quando dá errado

"você é root?"
$ apt install php-cli
Erro: Não foi possível abrir arquivo de trava /var/lib/dpkg/lock-frontend - open (13: Permissão negada)
Erro: Não é possível adquirir a trava da interface do dpkg (/var/lib/dpkg/lock-frontend), você é root?

O que aconteceu: faltou o sudo. Instalar programas exige permissão de administrador; sem ela, o apt não consegue nem "trancar" o catálogo para trabalhar. O comando termina com o código de saída 100.

Como resolver: sudo apt install php-cli. Dica: sudo !! repete o último comando com sudo na frente.

"Call to undefined function mb_strtoupper()" (ou outra mb_)
$ php -r 'echo mb_strtoupper("ação"), "\n";'
PHP Fatal error:  Uncaught Error: Call to undefined function mb_strtoupper() in Command line code:1
Stack trace:
#0 {main}
  thrown in Command line code on line 1

O que aconteceu: a extensão mbstring não está instalada. O mesmo vale para simplexml_load_string (extensão xml), curl_init (curl), imagecreate (gd).

Como resolver: php -m para conferir, e instale o pacote da tabela acima (sudo apt install php8.5-mbstring).

"could not find driver" ao usar o banco de dados
$ php -r 'new PDO("sqlite:loja.db"); echo "ok\n";'
PHP Fatal error:  Uncaught PDOException: could not find driver in Command line code:1
Stack trace:
#0 Command line code(1): PDO->__construct()
#1 {main}
  thrown in Command line code on line 1

O que aconteceu: o PDO (a extensão de bancos de dados) está instalado, mas não o "motorista" (driver) do banco pedido. Aqui, faltou o do SQLite; com MySQL seria o pdo_mysql.

Como resolver: sudo apt install php8.5-sqlite3 (ou php8.5-mysql). Veja Conectar com PDO.

Instalei a extensão, mas o site continua sem ela

O que aconteceu: o terminal já vê a extensão, mas o servidor web (Apache ou PHP-FPM) carregou o PHP antes da instalação e continua com a configuração antiga na memória.

Como resolver: reinicie o serviço: sudo systemctl restart apache2 ou sudo systemctl restart php8.5-fpm. Com o php -S, basta pará-lo (Ctrl+C) e ligar de novo.

Instalei o php e agora tem um Apache rodando

O que aconteceu: o pacote php (sem -cli) puxa o Apache, que liga sozinho e ocupa a porta 80.

Como resolver: se não vai usar, remova: sudo apt remove apache2 libapache2-mod-php8.5 (o php-cli continua instalado), ou só desligue: sudo systemctl disable --now apache2.


Referência

ComandoO que faz
php -vMostra a versão (e se o PHP está instalado).
apt-cache policy php-cliMostra a versão instalada e a disponível (Ubuntu e Debian).
sudo apt install php-cliInstala o PHP de linha de comando (Ubuntu e Debian).
apt-get -s install …Ensaio: mostra o que seria instalado, sem instalar.
sudo dnf install php-cliInstala no Fedora.
sudo pacman -S phpInstala no Arch.
sudo apt install php8.5-mbstring php8.5-sqlite3Instala extensões (Ubuntu e Debian).
php -mLista as extensões carregadas.
php --iniMostra onde está o php.ini e os .ini extras.
php --ini=diffLista os ajustes diferentes do padrão PHP 8.5+.
php -d ajuste=valor arquivo.phpMuda um ajuste só nesta execução.
php -r 'código'Roda um trecho de código sem criar arquivo.

Para fechar, use a extensão mbstring no editor do guia (que já a tem). Compare a função comum com a da extensão:

Missão: rode e repare: o strtoupper (sem mb_) não sabe passar letras acentuadas para maiúsculas e deixa é e ã como estão. Acrescente uma linha que use mb_strtoupper no mesmo texto, para aparecer CAFÉ COM PÃO.

<?php
echo strtoupper("café com pão") . "\n";
<?php
echo strtoupper("café com pão") . "\n";
echo mb_strtoupper("café com pão") . "\n";

Por que isso acontece? Letras acentuadas ocupam mais de um "pedaço" (byte) na memória, e as funções antigas do PHP trabalham pedaço por pedaço. A aula Acentos e mbstring explica com calma.


Exercícios

1. Instalar no Ubuntu

Complete o comando que instala o PHP de linha de comando no Ubuntu, sem trazer o Apache junto:

sudo apt install

2. Listar extensões

Qual opção do php lista as extensões carregadas?

php

3. Onde está o php.ini?

Complete o comando que mostra qual php.ini foi carregado:

php

4. Você viu Call to undefined function mb_strlen(). O que fazer?

5. No Ubuntu, um aviso aparece como PHP Warning: …, e no laboratório do guia como Warning: …. Por quê?


Resumo

  • Ubuntu e Debian: sudo apt install php-cli; Fedora: sudo dnf install php-cli; Arch: sudo pacman -S php.
  • Ubuntu 26.04 traz o PHP 8.5.4; Debian 13, o 8.4; Fedora 44 e Arch, o 8.5.11 (outubro de 2026).
  • Evite o pacote php sozinho no Ubuntu e no Debian: ele instala o Apache.
  • Confira com php -v (versão) e php -m (extensões).
  • Extensões são pacotes: php8.5-mbstring, php8.5-sqlite3, php8.5-mysql… "Call to undefined function" ou "could not find driver" costumam ser extensão faltando.
  • php --ini mostra o php.ini. No Ubuntu, CLI, FPM e Apache têm um cada; o de produção manda os erros para o registro (PHP Warning:).
  • Próximo passo: O Servidor Embutido (ou Instalar no Windows e macOS).