PHP: página dinâmica no servidor embutido
O PHP vem com um servidor de desenvolvimento dentro do próprio interpretador. Um comando no terminal e você já tem uma página que o servidor monta na hora, sem Apache, sem Nginx, sem arquivo de configuração.
O que PHP resolve
Uma página HTML salva no disco entrega o mesmo texto pra todo mundo, sempre. Preço, estoque, saldo, a data de hoje, o nome de quem acabou de entrar: nada disso cabe num arquivo fixo. Alguém precisa montar a página no instante em que o navegador pede.
PHP faz esse trabalho dentro do servidor. O código roda antes da resposta sair, monta o HTML com os valores daquele momento e entrega o resultado. O navegador recebe HTML comum e nunca vê o código que o gerou. Essa fronteira entre o que roda no servidor e o que roda no navegador separa o PHP do JavaScript que você escreve pra página.
Os conceitos que você precisa antes da primeira linha
- Requisição e resposta. O navegador pede um endereço, o servidor devolve um texto. Todo código PHP roda entre esses dois momentos, na máquina do servidor. Cada F5 do visitante é uma requisição nova, e o código roda outra vez do começo.
- Modo PHP. Um arquivo
.phpé HTML comum até aparecer a tag<?php. Daí em diante o texto vira código, até o?>. Você entra e sai do modo PHP quantas vezes quiser no mesmo arquivo, e o que está fora das tags vai direto pro navegador. - echo. A instrução que escreve texto na resposta. O que você passa pro
echoaparece no HTML que chega ao navegador, no lugar exato onde a tag estava. - Variável. Um nome começado por cifrão guarda um valor:
$agora,$sorteio. As variáveis nascem e morrem dentro de uma requisição, então nada sobra de um acesso pro seguinte. - Servidor embutido. O interpretador da linha de comando traz um servidor de desenvolvimento, ligado com
php -S. A documentação oficial avisa em caixa de alerta que ele serve pra desenvolver, testar e demonstrar em ambiente controlado, e que não deve ser usado em rede pública.
A linguagem por dentro: tipos, funções e objetos
PHP tem tipagem dinâmica com conversão automática: "5" + 2 vale 7, porque a linguagem converte o texto pra número antes de somar. É cômodo e é perigoso, e por isso o PHP moderno aceita declarar tipo em parâmetro, retorno e propriedade, além do modo estrito declare(strict_types=1) que desliga a conversão silenciosa.
- Os tipos do dia a dia:
int,float,string,bool,nulle oarray, que é o canivete da linguagem: serve de lista ([1, 2, 3]) e de mapa chave-valor (["nome" => "Ana"]) na mesma estrutura. - Função se declara com
function, e desde o PHP 7 vale anotar os tipos:function soma(float $a, float $b): float. - Orientação a objetos:
classcom propriedades tipadas, construtor__construct, visibilidade (public/private) e herança comextends. O ecossistema que você vai encontrar em vaga (Laravel, WordPress moderno) é todo escrito assim.
<?php
// tipos, função e classe em doze linhas
$precos = [12.5, 30, 7]; // array como lista
function formata(float $valor): string { // tipos declarados
return "R$ " . number_format($valor, 2);
}
class Carrinho {
private array $itens = []; // propriedade tipada
public function add(string $item): void {
$this->itens[] = $item; // acesso com ->
}
}
echo formata(array_sum($precos)); // R$ 49.50
O cifrão nas variáveis e a seta -> no acesso a objeto são a assinatura visual da linguagem: acostume o olho com os dois e qualquer código PHP fica legível.
Hello world: uma página calculada na hora
Precisa de terminal, de um editor de texto e do PHP instalado. Nada de servidor web separado.
-
Abra o terminal e confira se o PHP já está aí:
php -vSe a resposta começar com a palavra
PHPseguida de um número de versão, pule para o passo 3. Se o terminal disser que o comando não existe, faça o passo 2. -
Instale o PHP. No Debian, no Ubuntu e nas distribuições derivadas:
sudo apt update sudo apt install php-cliO manual oficial mostra a linha completa com
php-commonelibapache2-mod-phppara quem vai usar Apache. Para o servidor embutido, o pacotephp-clibasta.No macOS, com Homebrew:
brew install phpNo Windows, baixe o build em windows.php.net/download, escolha a versão Non Thread Safe de 64 bits, extraia o zip numa pasta como
C:\phpe abra o terminal dentro dela. Depois de instalar, rodephp -vde novo para confirmar. -
Crie a pasta do projeto e entre nela:
mkdir ola-php cd ola-php -
Dentro dessa pasta, crie um arquivo chamado
index.phpcom este conteúdo:<?php date_default_timezone_set('America/Sao_Paulo'); $agora = date('H:i:s'); $sorteio = random_int(1, 100); ?> <!DOCTYPE html> <html lang="pt-BR"> <head> <meta charset="UTF-8" /> <title>Minha primeira página em PHP</title> </head> <body> <h1>Olá, mundo</h1> <p>O servidor montou esta página às <?php echo $agora; ?>.</p> <p>Número sorteado nesta requisição: <?php echo $sorteio; ?></p> </body> </html>A linha do fuso vem antes de tudo por um motivo prático. Uma instalação nova do PHP deixa
date.timezonevazio nophp.inie o interpretador assume UTC, então o relógio da página sai três horas à frente de quem está no horário de Brasília. Comdate_default_timezone_set, o horário impresso bate com o relógio da sua máquina.O nome
index.phptem motivo. Quando a URL não aponta um arquivo, o servidor embutido procuraindex.phpouindex.htmlna pasta e devolve o que achar. -
Ainda dentro da pasta, ligue o servidor:
php -S localhost:8000O terminal para de devolver o prompt e imprime uma linha só, com data, versão do PHP e o endereço em que ele escuta:
[Sat Aug 15 07:28:33 2026] PHP 8.5.8 Development Server (http://localhost:8000) startedTutorial antigo costuma mostrar quatro linhas aqui, com raiz de documentos e o aviso de que Ctrl-C encerra. O PHP condensou tudo nessa linha única, e o comportamento continua o mesmo. Rodamos o comando no PHP 8.5.8 e no 8.1.34 e os dois imprimem a linha única.
-
Abra
http://localhost:8000/no navegador. Recarregue duas ou três vezes com F5, sem pressa entre uma e outra. -
Quando terminar, volte ao terminal e pressione Ctrl+C para parar o servidor.
Accepted, uma com o status e o caminho pedido no formato [200]: GET /, e uma Closing. Se o navegador mostrar o texto <?php escrito na tela, ou baixar um arquivo em vez de exibir a página, você abriu o arquivo direto do disco e não pelo endereço http://localhost:8000/.Uma coisa pra experimentar antes de sair
Troque date('H:i:s') por date('d/m/Y H:i:s'), salve e recarregue. A data aparece junto do horário sem você reiniciar o servidor. O servidor embutido lê o arquivo a cada requisição, então editar e recarregar basta.
O que PHP não é
O mito mais comum é achar que o PHP roda no navegador, como o JavaScript de uma página. Ele roda no servidor, e o código nunca sai de lá. Faça o teste: com a página aberta, peça "Ver código-fonte da página" no navegador. Aparece só HTML, com o horário já preenchido, sem uma linha sequer de PHP. É pela mesma razão que dois cliques no index.php não funcionam, já que nesse caminho ninguém executou o interpretador.
A segunda confusão é misturar PHP com WordPress. O WordPress foi escrito em PHP, e boa parte do que se chama por aí de "trabalhar com PHP" é mexer em tema de WordPress. A linguagem existe fora disso, e o hello world acima não tem nada de WordPress dentro.
Fontes
- Manual do PHP, Built-in web server, de onde saíram
php -S localhost:8000, a regra doindex.phpe o aviso de que o servidor não deve ir pra rede pública. Conferida em 15/08/2026. - Manual do PHP, Your first PHP-enabled page, com as tags
<?phpe?>e o primeiro arquivo servido emlocalhost:8000. Conferida em 15/08/2026. - Instalação em Debian e derivados e instalação no macOS, de onde vieram os pacotes do
apte obrew install php. Conferidas em 15/08/2026. - Função date e função random_int, usadas no exemplo. O
random_intestá disponível desde o PHP 7.0. Conferidas em 15/08/2026. - Versões suportadas: o ramo 8.5 foi lançado em 20/11/2025 e tem suporte ativo até 31/12/2027, com correção de segurança até 31/12/2029. A versão estável mais recente no feed oficial de releases é a 8.5.9, de 30/07/2026. Conferidas em 15/08/2026.
Rodamos este passo a passo em 15/08/2026, numa máquina Ubuntu 26.04 onde php -v respondia php: command not found. No lugar do apt, que exige root, usamos o binário estático oficial do projeto static-php-cli, que se identifica como PHP 8.5.8 (cli) (built: Jul 7 2026 05:21:52). Com o index.php desta página, o comando php -S localhost:8000 subiu o servidor e duas requisições seguidas voltaram HTTP 200 com conteúdo diferente: montou esta página às 07:29:13 com o sorteio 42, e três segundos depois às 07:29:16 com o sorteio 89. Três trechos desta página mudaram por causa do teste: a linha de fuso no index.php, a linha única que o servidor imprime ao subir e a contagem de linhas de log por requisição.
Para continuar
Python resolve o mesmo problema por outro caminho e também traz um servidor de desenvolvimento na caixa. Ruby vale a comparação de sintaxe logo depois. As duas páginas ficam no mesmo lugar deste mapa, o stack web.
O curso desta trilha está em preparação. A lista paga menos.
Os tutoriais daqui continuam gratuitos. O que está a caminho é um curso pago que transforma esse mapa em formação guiada, na ordem certa e com projeto. Deixe seu e-mail: você recebe os estudos novos gratuitos e, no lançamento, o desconto de quem entrou na lista primeiro.