SMFPT - Suporte e Manutenção de Fórum em Português

SMFPT Comunidade geral => Tutorial SMFPT => Tópico começado por: candidosa2 em 28 de Maio de 2026, 02:40

Título: Como corrigir o erro '8: Undefined index' nos logs do SMF
Mensagem de: candidosa2 em 28 de Maio de 2026, 02:40
Como Administrador Sénior de Fóruns e Programador Core do Simple Machines Forum (SMF), deparo-me frequentemente com administradores de comunidades preocupados com o crescimento exponencial dos seus logs de erros. Um dos culpados mais comuns e persistentes é o infame 8: Undefined index.

Embora este erro raramente cause uma quebra total do seu fórum (as famosas "páginas brancas" ou erros de base de dados), ele é um sintoma claro de código desleixado, modificações (mods) mal integradas ou temas desatualizados que tentam aceder a variáveis inexistentes. A longo prazo, milhares de registos deste erro podem sobrecarregar a sua base de dados, degradar a performance do servidor e dificultar a deteção de problemas realmente graves.

Neste artigo técnico detalhado, vamos compreender a anatomia deste erro, aprender a isolar a modificação ou tema culpado, limpar os logs de forma segura e aplicar correções de código definitivas.

O QUE É O ERRO '8: UNDEFINED INDEX' NO PHP E SMF?

No ecossistema do PHP (a linguagem de programação na qual o SMF é construído), um "index" (ou índice) refere-se a uma chave específica dentro de uma matriz de dados (Array). Por exemplo, na variável $context['forum_name'], a palavra 'forum_name' é o índice.

O erro 8: Undefined index ocorre quando o código do SMF, de um Mod ou de um tema tenta ler o valor de um índice que ainda não foi definido ou inicializado na memória.

Por que razão o SMF regista isto como um erro? O PHP, por padrão, gera um aviso menor (Notice) quando isto acontece e continua a executar o script. No entanto, a filosofia do SMF é manter o código o mais limpo e otimizado possível. Por isso, o manipulador de erros do SMF captura estes avisos e escreve-os no log do fórum para que os programadores possam corrigir estas falhas de lógica.

AS CAUSAS MAIS COMUNS DO PROBLEMA

Existem três cenários típicos que geram este erro no seu fórum:

1. Modificações Desatualizadas ou Incompletas: Instalar um Mod concebido para o SMF 2.0.x num fórum SMF 2.1.x (ou vice-versa) resulta frequentemente em incompatibilidades de variáveis. O Mod assume que uma determinada variável global existe, mas a nova versão do SMF removeu-a ou alterou o seu nome.
2. Temas Personalizados Desatualizados: Os criadores de temas, por vezes, esquecem-se de declarar variáveis de controlo ou tentam chamar dados do utilizador (ex: $txt['custom_string']) sem antes carregar o respetivo ficheiro de idioma.
3. Atualizações de Versão do PHP: Se atualizou recentemente o PHP do seu servidor (por exemplo, do PHP 7.4 para o PHP 8.0 ou 8.1), o motor do PHP tornou-se muito mais estrito com avisos de desenvolvimento, expondo erros que antes passavam despercebidos.

COMO ISOLAR E IDENTIFICAR O CULPADO

Antes de deitar as mãos ao código, precisamos de recolher dados. Não tente adivinhar qual é o Mod que está a causar o erro. Siga este processo científico de isolamento:

Passo 1: Limpar o Log de Erros Atual
Se o seu log tem centenas de páginas, fica difícil saber quais os erros que estão a ocorrer ativamente neste momento.
1. Aceda ao Painel de Administração.
2. Vá a Manutenção do Fórum -> Logs -> Log de Erros.
3. Clique em Limpar todos os erros.
Não se preocupe, isto não afeta o funcionamento do fórum, apenas liberta espaço na base de dados.

Passo 2: Recriar o Erro
Navegue pelo seu fórum como um utilizador normal. Clique em tópicos, aceda ao perfil, envie uma mensagem privada e visualize o portal (se tiver um). Volte ao Log de Erros e verifique se surgiram novas entradas.

Passo 3: Analisar a Mensagem de Erro e o Backtrace
Cada registo de erro no SMF fornece informações cruciais. Analise este exemplo típico:

8: Undefined index: member_stars
Ficheiro: /home/user/public_html/Sources/Load.php
Linha: 1240

Esta mensagem diz-nos exatamente:
- O índice em falta: member_stars- O ficheiro onde o erro ocorreu: Load.php (na pasta /Sources/)
- A linha exata do código: 1240
Muitas vezes, o SMF fornece também um link para ver o "Backtrace" (rastreio de execução). Clique nele para ver a rota que o PHP fez até chegar ao erro. Se o ficheiro listado for, por exemplo, /Themes/nome_do_tema/Display.template.php, saberá imediatamente que o culpado é o seu tema atual e não um ficheiro core do SMF.

COMO RESOLVER O ERRO NO CÓDIGO (EXEMPLOS PRÁTICOS)

Uma vez identificado o ficheiro e a linha, descarregue o ficheiro via FTP e abra-o num editor de texto profissional (como o Notepad++, VS Code ou Sublime Text). Nunca use o Bloco de Notas do Windows, pois este corrompe a codificação UTF-8.

Aqui estão as duas abordagens técnicas para corrigir o erro:

Abordagem A: Adicionar uma Verificação de Existência (isset ou empty)

Se o código tentar ler uma variável que pode não estar definida em todos os contextos, deve verificar primeiro se ela existe usando a função isset() ou !empty() do PHP.

Código Problemático Original:
if ($context['member_stars'] == 5)
{
    // Faz alguma ação aqui
}

Código Corrigido e Seguro:
if (isset($context['member_stars']) && $context['member_stars'] == 5)
{
    // Faz alguma ação de forma segura
}
Com esta alteração, o PHP apenas avalia o valor de member_stars se a variável realmente existir na memória, eliminando por completo o erro "Undefined index".

Abordagem B: Definir um Valor Padrão (Fallback)

Se a variável for necessária para exibição de texto ou cálculos, pode usar o operador de coalescência nula (disponível a partir do PHP 7.0) ou um operador ternário simples para atribuir um valor padrão caso o índice não exista.

Código Problemático Original:
echo $txt['custom_mod_title'];

Código Corrigido (Usando operador ternário simples):
echo !empty($txt['custom_mod_title']) ? $txt['custom_mod_title'] : 'Título Padrão';

Código Corrigido (Usando Coalescência Nula no PHP 7+):
echo $txt['custom_mod_title'] ?? 'Título Padrão';

RESOLVER ERROS DE IDIOMA (ARQUIVOS DE TRADUÇÃO)

Se o índice indefinido começar por $txt (por exemplo, 8: Undefined index: gallery_title no ficheiro /Themes/default/languages/), o problema reside quase de certeza na falta de tradução de um Mod.

Muitos criadores de Mods apenas inserem as linhas de idioma nos ficheiros ingleses (Modifications.english.php). Se o seu fórum corre em Português (Modifications.portuguese.php), o SMF tentará procurar a variável de idioma em português, não a encontrará e disparará o erro de índice indefinido.

Como Corrigir:
1. Abra o ficheiro correspondente em Inglês (ex: /Themes/default/languages/Modifications.english.php).
2. Procure pela chave em falta (ex: $txt['gallery_title'] = 'Gallery';).
3. Copie essa linha de código.
4. Abra o ficheiro equivalente em Português (ex: /Themes/default/languages/Modifications.portuguese.php).
5. Cole a linha antes da tag de fecho ?> e traduza o valor:
$txt['gallery_title'] = 'Galeria';

COMO LIMPAR GRANDES QUANTIDADES DE LOGS DE FORMA SEGURA

Se ignorou este erro durante meses, a sua tabela smf_log_errors na base de dados pode ter crescido até atingir centenas de megabytes (ou gigabytes), tornando o painel de administração do SMF inacessível ou extremamente lento ao tentar limpar os logs por via normal.

Nesse caso extremo, deve limpar a tabela diretamente através do phpMyAdmin:

1. Aceda ao painel de controlo da sua hospedagem (cPanel, DirectAdmin, etc.) e abra o phpMyAdmin.
2. Selecione a base de dados do seu fórum SMF.
3. Procure pela tabela smf_log_errors (o prefixo smf_ pode variar dependendo da sua instalação).
4. Clique no separador Operações (Operations) no topo.
5. Em baixo, clique na opção vermelha Esvaziar a tabela (TRUNCATE) ou Empty the table (TRUNCATE).

Aviso de Segurança: NUNCA utilize a opção "Eliminar" (DROP), pois isso apagará a estrutura da tabela por completo e causará erros críticos no fórum. A opção TRUNCATE apenas esvazia as linhas de dados, mantendo a estrutura intacta e saudável.

Seguindo estes passos rigorosos de diagnóstico e correção de código, o seu fórum SMF ficará livre do erro '8: Undefined index', garantindo uma base de dados mais leve, um carregamento de página ligeiramente mais rápido e logs limpos para diagnosticar problemas futuros com verdadeira eficácia.

Citação🛠️ Não consegue resolver este erro ou tem medo de mexer na base de dados?
Deixe que os engenheiros e programadores especialistas da Aplicsistemas.com (https://www.aplicsistemas.com) reparem o seu fórum SMF com total segurança e rapidez.

Citação🛠️ Não consegue resolver este erro ou tem medo de mexer na base de dados?
Deixe que os engenheiros e programadores especialistas da Aplicsistemas.com (https://www.aplicsistemas.com) reparem o seu fórum SMF com total segurança e rapidez.