Engenharia Web · PHP+XML
servidor: http://localhost/cadastro-funcionario/public/
← → navega
aula 01 · primeira prática de engenharia web

Do formulário ao arquivo:
como o navegador conversa com o servidor e grava em XML

Você já montou o projeto cadastro-funcionario rodando em localhost. Agora vamos entender, com animações, o que acontece dentro da requisição — e o que, nesta estrutura, é rota, o que é API e o que é endpoint.

Cliente = navegador Servidor = Apache + PHP Dados = arquivo XML
você@localhost:~$ sudo systemctl start apache2
Apache em pé na porta 80 ✓
você@localhost:~$ xdg-open http://localhost/cadastro-funcionario/public/
01 · o modelo mental

Mesma máquina, dois papéis

No localhost tudo está no seu computador — mas continuam existindo dois lados. O navegador pede (cliente). O Apache + PHP respondem e gravam (servidor). Entre eles passa o protocolo HTTP.

Cliente

🌐 Navegador

Mostra o HTML, envia o formulário, recebe a resposta.

  • Renderiza o index.php já virado em HTML
  • Dispara o POST ao clicar em Cadastrar
  • Nunca vê o código PHP
GET /public/
POST processar-cadastro.php
302 → sucesso
Servidor

⚙️ Apache + PHP

Executa o PHP e usa o sistema de arquivos.

  • Recebe o POST, valida os campos
  • Abre e grava o cadastrofuncionario.xml
  • Roda como usuário www-data
💡 Por que isso importa: os arquivos .php estão fisicamente no servidor. O index.php produz HTML que viaja até o navegador; o código PHP em si nunca sai do servidor. Por isso senha, validação e gravação ficam seguras do lado do servidor.
02 · estrutura do projeto

Duas pastas, duas naturezas

Clique em cada arquivo. Repare na etiqueta: rota e endpoint ficam em public/ (alcançáveis pelo navegador); dados fica em storage/ (interno, sem rota).

📁cadastro-funcionario/
📂public/público
📄index.phprota
processar-cadastro.phpendpoint
📄cadastro-sucesso.phprota
🎨css/estilo.cssrota
📂storage/privado
🗄️cadastrofuncionario.xmldados
🔒.htaccessbloqueio

Selecione um arquivo

árvore do projeto

A pasta public/ é a única exposta ao navegador — é a "porta de entrada" da aplicação. A pasta storage/ guarda os dados e fica protegida pelo .htaccess.

03 · conceito 1

O que é uma rota aqui?

Rota é o endereço (URL) que o navegador pede. Quem decide "qual endereço vira qual arquivo" é o Apache. Como você não usa framework, a rota é resolvida pela própria estrutura de pastas — isso se chama roteamento por arquivos.

🔒 http://localhost/cadastro-funcionario/public/
Clique numa URL acima. O Apache vai mapear o endereço para um arquivo físico dentro de public/.
🚫 storage/ não tem rota. Por causa do .htaccess com Require all denied, nenhuma URL chega ao XML. Ele só é alcançado pelo PHP via sistema de arquivos — nunca por uma rota do navegador.
04 · conceitos 2 e 3

API, endpoint e quem os configura

Endpoint é uma rota que executa uma ação e devolve uma resposta. Nesta aplicação, o processar-cadastro.php chamado via POST é o endpoint de ação: ele recebe dados, processa e responde (redireciona).

Rota
O endereço. Resolvido pelo Apache → arquivo em public/.
URL
Endpoint
processar-cadastro.php + método POST. Não desenha página: recebe dados, grava e redireciona.
URL + verbo + ação
API
O conjunto de pontos de entrada do servidor (os arquivos de public/). Aqui é a base de uma API — server-rendered, não REST.
interface do servidor
Quem CHAMA o endpoint — no cliente
index.php · formulário
<form action="processar-cadastro.php" method="POST">

action = o endereço do endpoint. method = o verbo HTTP. Juntos definem a chamada.

Quem DEFINE o endpoint — no servidor
processar-cadastro.php · contrato
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    header('Location: index.php');
    exit;
}

Essa guarda diz: "este endpoint só aceita POST". É o contrato do endpoint, escrito no servidor.

Honestidade técnica: isto ainda não é uma API REST (que responderia JSON em vez de redirecionar e separaria dados de página). É o embrião dela. Você acabou de construir seu primeiro endpoint de ação — o resto da carreira é refinar essa mesma ideia.
05 · animação · o caminho do dado

A jornada de um cadastro

Aperte play e siga o pacote de dados do clique até o arquivo gravado.

pronto para começar
POST nome,email,cargo,salário
🌐
Navegador
usuário preenche e clica em Cadastrar
processar-cadastro.php
Apache executa o PHP
campos?
e-mail?
salário?
🗄️
cadastrofuncionario.xml
novo <funcionario> gravado em storage/
cadastro-sucesso.php
redirect 302 → confirmação
O navegador envia os dados por POST. Se qualquer validação falhar, o PHP responde com erro e não grava nada — o XML só muda quando todas as portas passam.
06 · animação · manipulação de arquivo

Dentro do processar-cadastro.php

Aqui está o coração da aula: como o PHP encontra, carrega, altera e grava o XML. O código à esquerda acende junto com a visualização.

passo 0 / 6
public/processar-cadastro.phpSimpleXML
// 1 · monta o caminho até o arquivo
$caminhoXml = __DIR__ . '/../storage/cadastrofuncionario.xml';
// 2 · confere se o arquivo existe
if (!file_exists($caminhoXml)) exit('XML não encontrado.');
// 3 · carrega o XML para a memória
$xml = simplexml_load_file($caminhoXml);
// 4 · calcula o próximo id
$id = count($xml->funcionario) + 1;
// 5 · acrescenta o novo funcionário
$f = $xml->addChild('funcionario');
$f->addAttribute('id', (string)$id);
$f->addChild('nome', $nome);
$f->addChild('email', $email);
$f->addChild('cargo', $cargo);
$f->addChild('salario', $salario);
// 6 · grava de volta no disco
$xml->asXML($caminhoXml);
header('Location: cadastro-sucesso.php');
visualização disco
public/ ← __DIR__ (onde o script roda)
../ sobe para cadastro-funcionario/
storage/cadastrofuncionario.xml
💾
o arquivo no disco ainda não mudou — tudo acontece na memória até o asXML().
07 · fechamento

Rodando no localhost — e o que levar

Recapitulando a aula no nível de quem agora entende o que digita na barra de endereços.

iniciar o ambiente
# dar permissão de escrita ao Apache
sudo chown -R $USER:www-data cadastro-funcionario
sudo chmod 775 cadastro-funcionario/storage
# abrir no navegador
http://localhost/cadastro-funcionario/public/
1

Cliente x servidor existem mesmo no localhost. O navegador pede; Apache + PHP respondem e gravam.

2

Rota = a URL, resolvida pela estrutura de public/. storage/ não tem rota.

3

Endpoint = rota + verbo + ação: processar-cadastro.php via POST.

4

Manipular arquivo = encontrar → carregar na memória → alterar → asXML() grava no disco.

🎯 A frase da aula: o diferencial não é "fazer o site aparecer", é saber onde cada dado entra, por onde passa e onde é gravado — e conseguir explicar isso linha por linha.