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).

Você vai aprender
  • O que fazem <?php, echo, as aspas e o ;.
  • Para que serve o \n no fim do texto.
  • Criar um arquivo .php e rodá-lo com php ola.php.
  • Ver o mesmo arquivo como página, com php -S e o navegador (ou o curl).
  • 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 n nã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 \n final 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 \n nã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:

  1. Crie uma pasta para os exercícios, por exemplo site, dentro da sua pasta pessoal.
  2. Abra a pasta no seu editor de código (aula Editores e IDEs) e crie um arquivo novo chamado ola.php.
  3. Digite as duas linhas do programa (digite, não copie: é assim que os dedos aprendem onde ficam o <, o ? e o ;).
  4. 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.

No terminal, a extensão nem importa

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.

TerminalNavegador
Comandophp ola.phpphp -S localhost:8000 + http://localhost:8000/ola.php
Quem chama o PHPVocêO servidor, a cada visita (ou a cada F5)
Para onde vai o echoA tela do terminalA página enviada ao navegador
Quando usarProgramas de terminal, exercícios do Nível 1Pá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)

FormaFunciona?Use?
<?php … (sem fechar)SimSim, em arquivos só de PHP.
<?php … ?>SimQuando 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úsculasSim: palavras do PHP não diferenciam maiúsculasNã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

Esqueci o ;
<?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.

Esqueci o ; 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.

Esqueci de fechar as aspas
<?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.

O código apareceu na tela em vez de rodar
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).

"Could not open input file"
$ 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.

"headers already sent … output started at …"

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

ElementoO que faz
<?phpComeç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.
\nQuebra de linha, dentro de aspas duplas.
;Termina cada instrução.
php arquivo.phpRoda o arquivo no terminal.
php -S localhost:8000Liga 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:

"Oi\n";

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.
  • \n pula a linha no terminal; o echo nunca pula sozinho.
  • Terminal: php ola.php. Navegador: php -S localhost:8000 e http://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.