Pular para o conteúdo principal

Questão de Programação — PHP — FGV 2023

ProgramaçãoPHP
Código
fg072586
Banca
FGV
Órgão
TJ-SE
Ano
2023
Nível
Superior
Cargo
Analista Judiciário - Especialidade - Análise de Sistemas
No contexto do PHP, analise a estrutura simplificada de uma página Web exibida a seguir, onde a numeração serve meramente como referência a cada uma das linhas.Imagem associada para resolução da questãoNesse contexto, considere as três linhas de códigos abaixo.<?php session_start(); ?>A inserção em bloco dessas linhas adicionais, na página acima, deve ser feita:
  1. Aantes da linha 1;
  2. Bentre as linhas 2 e 3;
  3. Centre as linhas 3 e 4;
  4. Dentre as linhas 7 e 8;
  5. Edepois da linha 9.
Revelar gabarito e comentário

GabaritoA — antes da linha 1;

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

PHP: posicionamento de session_start() em página HTML

Gabarito: letra A. A chamada session_start() deve ser feita antes de qualquer saída de conteúdo para o navegador — ou seja, antes da linha 1, que inicia o documento HTML. Isso porque a função envia cabeçalhos HTTP (como o cookie de sessão) e, se já houver saída de HTML, o PHP emite um aviso e a sessão pode não ser iniciada corretamente.

A função session_start() é responsável por iniciar ou retomar uma sessão no PHP. Sessões são um mecanismo para armazenar dados do usuário entre requisições HTTP, que são stateless (sem estado). Quando chamada, o PHP verifica se existe um cookie de sessão (por padrão chamado PHPSESSID) e, se não houver, cria um novo ID de sessão e envia o cookie ao navegador. Esse cookie é um cabeçalho HTTP, e cabeçalhos só podem ser enviados antes de qualquer conteúdo do corpo da resposta (HTML, espaços em branco, etc.).

Na prática, se você inserir session_start() depois de já ter enviado HTML (por exemplo, após a tag <!DOCTYPE html> ou qualquer texto), o PHP tentará enviar o cabeçalho, mas como a saída já começou, ocorrerá um erro como "headers already sent". O aviso não impede a execução, mas a sessão pode não funcionar como esperado, e o cookie pode não ser definido. Por isso, a boa prática — e o que a banca cobra — é colocar session_start() no topo absoluto do arquivo, antes de qualquer outra coisa, inclusive antes da declaração do DOCTYPE.

Vamos entender a estrutura da página: a linha 1 provavelmente contém <!DOCTYPE html> ou <html>, que são as primeiras saídas de conteúdo. Qualquer texto ou tag HTML enviada ao navegador conta como saída. Portanto, para garantir que a sessão funcione, o bloco de código PHP com session_start() deve ser inserido antes da linha 1, ou seja, no início absoluto do arquivo, antes de qualquer tag HTML.

A pegadinha aqui é que muitos candidatos pensam que basta colocar o código PHP em qualquer lugar antes do </head> ou antes do corpo, mas a regra é mais estrita: deve ser antes de qualquer saída, incluindo espaços em branco ou BOM (Byte Order Mark) que possam ser enviados antes do <?php. Por isso, a alternativa correta é a letra A.

Alternativa A — ✅ Correta ⟵ GABARITO

A inserção deve ser feita antes da linha 1, pois session_start() precisa ser chamada antes de qualquer saída de conteúdo para o navegador. Como a linha 1 inicia o documento HTML (provavelmente com <!DOCTYPE html> ou <html>), qualquer código PHP que envie cabeçalhos deve vir antes dela. Isso garante que o cookie de sessão seja enviado corretamente e que a sessão seja iniciada sem erros.

Alternativa B — ❌ Incorreta

Inserir entre as linhas 2 e 3 já seria tarde demais, pois a linha 1 (e possivelmente a linha 2) já teria enviado conteúdo HTML ao navegador. Nesse ponto, o PHP não conseguiria mais enviar o cabeçalho do cookie, resultando no aviso "headers already sent" e na falha potencial da sessão.

Alternativa C — ❌ Incorreta

Entre as linhas 3 e 4, o mesmo problema se aplica: já houve saída de HTML. A sessão não seria iniciada corretamente, e o cookie não seria definido. A posição correta é sempre antes de qualquer saída, não importa se é no meio do <head> ou do <body>.

Alternativa D — ❌ Incorreta

Entre as linhas 7 e 8, o conteúdo HTML já foi amplamente enviado. A chamada a session_start() aqui seria ineficaz e geraria o erro de cabeçalhos já enviados. A única posição válida é antes de qualquer saída, ou seja, antes da linha 1.

Alternativa E — ❌ Incorreta

Depois da linha 9, o documento HTML já está praticamente completo. Inserir session_start() aqui não teria efeito algum, pois os cabeçalhos já foram enviados. A sessão não seria iniciada, e o cookie não seria definido.

NÃO CAIA NESSA!

A banca tenta confundir o candidato ao sugerir posições intermediárias no documento, como entre as linhas 2 e 3 ou entre 7 e 8. Muitos pensam que basta colocar o código antes do </head> ou antes do corpo, mas a regra é mais estrita: deve ser antes de qualquer saída, incluindo espaços em branco ou BOM. A única posição correta é antes da linha 1, no topo absoluto do arquivo.

PEGA ESSA DICA!

Para questões de posicionamento de session_start(), lembre-se: sempre antes de qualquer saída de conteúdo. Se a página tem <!DOCTYPE html> na linha 1, o código PHP deve vir antes dela. Uma boa prática é colocar o bloco <?php session_start(); ?> no início do arquivo, antes de qualquer tag HTML.

Gabarito: letra A

Link permanente: /questoes/fg072586