PHP Olá, Mundo
Há uma tradição na programação: o primeiro programa em qualquer linguagem escreve "Olá, mundo!" na tela. Em PHP, ele tem duas linhas. Nesta aula você vai entender cada pedaço dessas duas linhas, criar o arquivo, rodá-lo no terminal e no navegador, e conhecer os primeiros erros que todo mundo comete (e como consertá-los).
- O que fazem
<?php,echo, as aspas e o;. - Para que serve o
\nno fim do texto. - Criar um arquivo
.phpe rodá-lo comphp ola.php. - Ver o mesmo arquivo como página, com
php -Se o navegador (ou ocurl). - O que é a marca de fechamento
?>e por que é melhor não usá-la em arquivos só de PHP.
A ideia: um bilhete com instruções
Imagine que você deixa um bilhete para alguém: "Fale bom dia para a turma." A pessoa lê e faz. Um programa PHP é um bilhete assim, escrito numa língua que o PHP entende. A primeira instrução que você vai aprender é a mais simples de todas: escreva este texto.
O programa
<?php echo "Olá, mundo!\n";
Duas linhas. Vamos desmontar cada pedaço:
- <?php
- A marca de abertura. Avisa: "daqui em diante, é código PHP". Tudo o que vier antes dela (ou sem ela) é tratado como texto comum e copiado para a saída sem ser executado. É escrita sempre assim: menor-que, interrogação,
php, sem espaços no meio. - echo
- Uma palavra do PHP que significa "escreva na saída o que vem a seguir". Em inglês, echo é "eco": o PHP "ecoa" o que você mandar. No terminal, a saída é a tela; numa página, é o HTML enviado ao navegador.
- "Olá, mundo!\n"
- O texto a escrever, entre aspas duplas. As aspas marcam onde o texto começa e termina e não aparecem na saída. Um texto assim, em programação, se chama string (em inglês, "cordão": letras enfileiradas como contas num cordão).
- \n
- Dentro das aspas duplas, a barra invertida seguida de
nnão é escrita como está: vira uma quebra de linha (new line, "nova linha"). É como apertar Enter no fim do texto. - ;
- O ponto e vírgula termina a instrução, como o ponto final de uma frase. Cada instrução do PHP termina com
;.
Repare no que não existe: não há nada para "iniciar" ou "terminar" o programa. O PHP simplesmente lê o arquivo de cima para baixo e executa cada instrução, na ordem. Quando o arquivo acaba, o programa acaba.
Rode no editor:
<?php echo "Olá, mundo!\n";
Mais de uma instrução
Cada echo escreve um pedaço. Com vários, o PHP escreve um depois do outro, na ordem em que aparecem:
<?php echo "Olá, mundo!\n"; echo "Meu nome é Ana.\n"; echo "Estou aprendendo PHP.\n";
$ php apresentacao.php Olá, mundo! Meu nome é Ana. Estou aprendendo PHP.
Missão: acrescente uma terceira linha que escreva Eu moro em seguido da sua cidade (por exemplo, Eu moro em Recife.), com \n no fim. Não esqueça as aspas e o ;.
<?php echo "Olá, mundo!\n"; echo "Meu nome é Ana.\n";
<?php echo "Olá, mundo!\n"; echo "Meu nome é Ana.\n"; echo "Eu moro em Recife.\n";
Para que serve o \n?
O echo escreve exatamente o que você mandou, nem um caractere a mais: ele não pula linha sozinho. Veja o que acontece no terminal sem o \n:
<?php echo "Olá, mundo!";
$ php semn.php Olá, mundo!ana@notebook:~/site$ « o prompt grudou no texto
O texto saiu, mas o prompt do terminal ficou grudado nele, porque ninguém mandou pular a linha. Com o \n, o prompt volta para a linha de baixo, como deve ser. Duas observações:
- No editor do guia, o
\nfinal não faz diferença visível, mas faça o hábito de colocá-lo em programas de terminal. - Numa página da web, o
\nnão pula linha na tela (o navegador ignora quebras no HTML); lá se usa<br>ou parágrafos<p>. A aula echo e print compara as formas.
Criando o arquivo
Um programa PHP é um arquivo de texto com a extensão .php. Para criar o seu:
- Crie uma pasta para os exercícios, por exemplo
site, dentro da sua pasta pessoal. - Abra a pasta no seu editor de código (aula Editores e IDEs) e crie um arquivo novo chamado
ola.php. - Digite as duas linhas do programa (digite, não copie: é assim que os dedos aprendem onde ficam o
<, o?e o;). - Salve (Ctrl+S) em UTF-8.
Se preferir o terminal, dá para criar o arquivo sem editor. Tudo o que você digitar entre a primeira linha e a palavra FIM vai para dentro do arquivo (os > são o terminal pedindo a continuação):
$ mkdir -p site && cd site $ cat > ola.php <<'FIM' > <?php > echo "Olá, mundo!\n"; > FIM $ cat ola.php <?php echo "Olá, mundo!\n";
Rodando no terminal: php ola.php
Com o PHP instalado (aulas Instalar no Linux e Instalar no Windows e macOS), entre na pasta do arquivo e chame o php com o nome do arquivo:
$ cd site $ php ola.php Olá, mundo! $ echo $? 0 « 0 = o programa terminou sem erro
- php
- O interpretador: o programa que lê o seu código e o executa.
- ola.php
- O arquivo a executar. O caminho é relativo à pasta onde você está; de outra pasta, seria
php site/ola.php.
O echo $? (comando do terminal, não do PHP) mostra o código de saída do último programa: 0 quer dizer sucesso. Você vai usar isso em PHP na Linha de Comando.
O comando php executa qualquer arquivo que você mandar, até um ola.txt:
$ php ola.txt Olá, mundo!
Mesmo assim, use sempre .php: os editores reconhecem a linguagem pela extensão, e os servidores web só passam pelo PHP os arquivos .php.
Rodando como página: php -S
O mesmo arquivo pode ser aberto no navegador. Ligue o servidor embutido do PHP na pasta site (detalhes na aula O Servidor Embutido):
$ php -S localhost:8000 [Fri Oct 16 21:12:00 2026] PHP 8.5.8 Development Server (http://localhost:8000) started
Deixe esse terminal aberto e, no navegador, acesse http://localhost:8000/ola.php. Aparece Olá, mundo!. Ou, num segundo terminal, peça a página com o curl:
$ curl localhost:8000/ola.php Olá, mundo!
E o servidor anota a visita no primeiro terminal:
$ php -S localhost:8000 [Fri Oct 16 21:12:00 2026] PHP 8.5.8 Development Server (http://localhost:8000) started [Fri Oct 16 21:12:01 2026] 127.0.0.1:56636 Accepted [Fri Oct 16 21:12:01 2026] 127.0.0.1:56636 [200]: GET /ola.php [Fri Oct 16 21:12:01 2026] 127.0.0.1:56636 Closing
Quando terminar, volte ao terminal do servidor e aperte Ctrl+C.
| Terminal | Navegador | |
|---|---|---|
| Comando | php ola.php | php -S localhost:8000 + http://localhost:8000/ola.php |
| Quem chama o PHP | Você | O servidor, a cada visita (ou a cada F5) |
Para onde vai o echo | A tela do terminal | A página enviada ao navegador |
| Quando usar | Programas de terminal, exercícios do Nível 1 | Páginas e sites (a partir de PHP Dentro do HTML) |
A marca de fechamento ?>
Se existe <?php para abrir, existe ?> para fechar: ele diz "aqui acaba o código PHP; o que vier depois é texto comum de novo". Ele é essencial quando PHP e HTML se misturam (você vai ver na próxima aula). Num arquivo que só tem PHP, ele é opcional:
<?php echo "Olá, mundo!" ?>
$ php fecha.php Olá, mundo!ana@notebook:~/site$
Funciona (e, curiosamente, o ?> também serve de fim de instrução, por isso não houve reclamação da falta do ;). Mas a recomendação oficial do PHP e do padrão de estilo PSR-12 é: em arquivos que só têm PHP, não feche com ?>. O motivo é sutil, e aparece quando um arquivo é usado por outro.
O problema: o que vem depois do ?> vira saída
A Ana separou a configuração da loja num arquivo próprio, que termina com ?> e, sem ela perceber, uma linha em branco a mais:
<?php $loja = "Lojinha da Ana"; ?>
<?php
require "config.php";
header("Content-Type: text/plain; charset=utf-8");
echo "Bem-vinda à $loja!\n";
O inicio.php carrega o config.php (com require, aula include e require) e tenta ajustar um cabeçalho da resposta com header() (aula header e Redirecionamento). Veja o resultado:
$ curl -i localhost:8000/inicio.php HTTP/1.1 200 OK Host: localhost:8000 Date: Sat, 17 Oct 2026 00:12:01 GMT Connection: close X-Powered-By: PHP/8.5.8 Content-type: text/html; charset=UTF-8 « o header() não teve efeito <br /> <b>Warning</b>: Cannot modify header information - headers already sent by (output started at /home/ana/site/config.php:4) in <b>/home/ana/site/inicio.php</b> on line <b>3</b><br /> Bem-vinda à Lojinha da Ana!
"Não é possível modificar o cabeçalho: os cabeçalhos já foram enviados (a saída começou em config.php:4)". A linha em branco depois do ?> está fora do PHP, então é texto comum e foi enviada ao navegador. Assim que o primeiro caractere sai, os cabeçalhos da resposta vão junto, e não dá mais para mudá-los. (O PHP engole uma única quebra de linha logo depois do ?>; foi a segunda que escapou, a da linha 4.)
Agora o mesmo config.php sem a marca de fechamento:
<?php $loja = "Lojinha da Ana";
$ curl -i localhost:8000/inicio2.php HTTP/1.1 200 OK Host: localhost:8000 Date: Sat, 17 Oct 2026 00:12:06 GMT Connection: close X-Powered-By: PHP/8.5.8 Content-Type: text/plain; charset=utf-8 « agora o header() funcionou Bem-vinda à Lojinha da Ana!
Sem ?>, linhas em branco no fim do arquivo continuam "dentro" do PHP e são ignoradas. Por isso a regra: arquivo só de PHP: abre com <?php e não fecha. Arquivo que mistura PHP e HTML: abre e fecha quantas vezes precisar.
Variações que funcionam (e uma para evitar)
| Forma | Funciona? | Use? |
|---|---|---|
<?php … (sem fechar) | Sim | Sim, em arquivos só de PHP. |
<?php … ?> | Sim | Quando houver HTML depois do PHP. |
<?= "texto" ?> | Sim: é um atalho para <?php echo "texto" ?> | Sim, dentro do HTML (próxima aula). |
<?PHP e ECHO em maiúsculas | Sim: palavras do PHP não diferenciam maiúsculas | Não: o costume é tudo minúsculo (aula Sintaxe). |
<? … ?> (a "marca curta") | Depende da configuração (short_open_tag) | Não. Num servidor com ela desligada, o código aparece cru para o visitante. |
Prova da marca curta: o mesmo arquivo, <? echo "Olá\n"; ?>, no PHP do laboratório (configuração de fábrica, marca curta ligada) e num PHP com short_open_tag=Off (como o php.ini de produção do Ubuntu):
$ php curta.php Olá $ php -d short_open_tag=Off curta.php <? echo "Olá\n"; ?> « não executou: saiu como texto
Quando dá errado
;
<?php echo "Olá, mundo!" echo "Tchau!";
$ php a.php Parse error: syntax error, unexpected token "echo", expecting "," or ";" in /home/ana/t/a.php on line 3
O que aconteceu: "Erro de análise: erro de sintaxe, palavra echo inesperada, esperava , ou ;, na linha 3". O ; que falta é o da linha 2, mas o PHP só percebe o problema quando encontra o echo da linha 3 sem que a instrução anterior tenha terminado. Nenhuma linha rodou: com erro de sintaxe, o PHP nem começa.
Como resolver: olhe a linha indicada e a anterior. Coloque o ; no fim da linha 2.
; na última linha
$ php semfim.php Parse error: syntax error, unexpected end of file, expecting "," or ";" in /home/ana/site/semfim.php on line 3
O que aconteceu: "fim de arquivo inesperado". O arquivo acabou (linha 3 é a linha vazia depois do último Enter) com uma instrução ainda aberta.
Como resolver: ; no fim da última instrução.
<?php echo "Olá, mundo!;
$ php b.php
Parse error: syntax error, unexpected end of file, expecting variable or "${" or "{$" in /home/ana/t/b.php on line 3
O que aconteceu: as aspas abriram e nunca fecharam, então o ; e todo o resto do arquivo viraram parte do texto. O PHP chegou ao fim do arquivo ainda "dentro" da string. A parte expecting variable or "${" parece estranha; é o PHP listando o que poderia vir dentro de uma string de aspas duplas. Quando a mensagem fala em "end of file" (fim de arquivo), procure algo que abriu e não fechou: aspas, parênteses, chaves.
Como resolver: feche as aspas antes do ;: echo "Olá, mundo!";. No editor de código, as cores denunciam: tudo depois da aspa aberta fica com a cor de texto.
echo "Olá!";
$ php d.php echo "Olá!";
O que aconteceu: faltou o <?php. Sem ele, o PHP trata o arquivo inteiro como texto comum e o copia para a saída, sem erro nenhum.
Como resolver: comece o arquivo com <?php, na primeira linha, sem nada antes (nem espaço, nem linha em branco).
$ php ola Could not open input file: ola $ echo $? 1
O que aconteceu: "Não foi possível abrir o arquivo de entrada: ola". O nome digitado não corresponde a nenhum arquivo nesta pasta: aqui, faltou o .php. Também acontece quando você está na pasta errada.
Como resolver: confira com ls (no Windows, dir) e digite o nome completo. A tecla Tab completa nomes de arquivos.
O que aconteceu: alguma coisa foi escrita antes de um header(), de um session_start() ou de um redirecionamento. Os culpados mais comuns: uma linha em branco depois de um ?> (como no exemplo acima), espaços antes do <?php, ou o BOM de um arquivo salvo como "UTF-8 com BOM" (aula Editores e IDEs).
Como resolver: a mensagem diz o arquivo e a linha onde a saída começou (output started at config.php:4). Vá até lá, apague o que sobra e não feche arquivos só de PHP com ?>.
Referência
| Elemento | O que faz |
|---|---|
<?php | Começa o código PHP. Primeira coisa do arquivo. |
?> | Termina o código PHP. Omita em arquivos só de PHP. |
echo "texto"; | Escreve o texto na saída. |
"…" | Uma string (texto) entre aspas duplas. |
\n | Quebra de linha, dentro de aspas duplas. |
; | Termina cada instrução. |
php arquivo.php | Roda o arquivo no terminal. |
php -S localhost:8000 | Liga o servidor; abra http://localhost:8000/arquivo.php. |
Para fechar, conserte um programa quebrado. Ele tem três problemas, um em cada linha. Rode, leia a mensagem, conserte um de cada vez:
Missão: faça o programa escrever Bom dia! numa linha e Hoje é dia de PHP. na linha de baixo, sem nenhum erro. Dica: falta a marca de abertura, sobra uma aspa a menos e falta um ;.
php echo "Bom dia!\n; echo "Hoje é dia de PHP.\n"
<?php echo "Bom dia!\n"; echo "Hoje é dia de PHP.\n";
Exercícios
1. A marca de abertura
Complete a primeira linha de todo arquivo PHP:
2. Escrever um texto
Complete a instrução para escrever Oi e pular a linha:
3. Rodar no terminal
Complete o comando que roda o arquivo ola.php:
4. A mensagem diz unexpected token "echo" … on line 5. Onde provavelmente está o erro?
5. Por que não se usa ?> no fim de um arquivo que só tem PHP?
6. O que echo "A"; echo "B"; escreve?
Resumo
- Todo arquivo PHP começa com
<?php; sem ele, o conteúdo sai como texto. echo "texto";escreve na saída; as aspas delimitam a string; o;termina a instrução.\npula a linha no terminal; oechonunca pula sozinho.- Terminal:
php ola.php. Navegador:php -S localhost:8000ehttp://localhost:8000/ola.php. - Em arquivos só de PHP, não feche com
?>: o que sobra depois dele vira saída e causa "headers already sent". - Erros de sintaxe (
Parse error): olhe a linha indicada e a anterior; "unexpected end of file" = algo abriu e não fechou. - Próximo passo: PHP Dentro do HTML.