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

SMFPT Comunidade geral => Tutorial SMFPT => Tópico começado por: candidosa2 em 27 de Maio de 2026, 07:01

Título: Corrigir ecrã branco (White Screen of Death) ao mudar para PHP 8.x no SMF 2.0
Mensagem de: candidosa2 em 27 de Maio de 2026, 07:01
INTRODUÇÃO: O QUE É O ECRÃ BRANCO DA MORTE (WSOD)?

Se atualizou recentemente a versão do PHP do seu servidor para o PHP 8.0, 8.1, 8.2 ou superior, e o seu fórum Simple Machines Forum (SMF) na versão 2.0.x de repente deixou de funcionar, apresentando apenas uma página em branco (o temido White Screen of Death), não entre em pânico. Este é um comportamento extremamente comum e esperado quando se tenta correr código legacy (antigo) num interpretador de PHP moderno.

Neste artigo técnico detalhado, vamos analisar a fundo o porquê de isto acontecer, quais as incompatibilidades críticas entre o SMF 2.0 e o PHP 8.x, como depurar o erro para encontrar a linha exata do problema e, finalmente, as soluções definitivas para colocar a sua comunidade online novamente.

A CAUSA TÉCNICA: PORQUE É QUE O PHP 8.X QUEBRA O SMF 2.0?

O Simple Machines Forum da ramificação 2.0.x foi originalmente desenhado há mais de uma década, numa altura em que o PHP 5.3 a 5.6 eram os padrões de desenvolvimento. Ao longo dos anos, a equipa de desenvolvimento do PHP foi removendo funções obsoletas e introduzindo uma tipagem muito mais estrita nas versões PHP 7.x e, de forma muito mais agressiva, no PHP 8.x.

Aqui estão os três principais culpados técnicos que causam o colapso do SMF 2.0 antigo no PHP 8.x:

1. Remoção Completa da Função create_function()[/b]
A função create_function() foi depreciada no PHP 7.2 e completamente removida no PHP 8.0. O SMF 2.0 utilizava esta função em vários ficheiros das Sources/ (como no motor de busca e na integração de BBCode) para criar funções anónimas dinamicamente. No PHP 8, chamar esta função resulta num Fatal Error fatal instantâneo, parando a execução do script e gerando o ecrã branco.

2. Fim do Acesso a Arrays com Chavetas {}[/b]
Antigamente, o PHP permitia aceder a elementos de um array ou caracteres de uma string usando chavetas, como por exemplo: $string{0}. No PHP 8.0, esta sintaxe foi completamente abolida, sendo agora obrigatório o uso de parênteses retos: $string[0]. O código antigo do SMF está repleto desta sintaxe desatualizada.

3. Passagem de Parâmetros Inválidos a Funções Internas
No PHP 8.x, muitas funções internas do PHP passaram de emitir avisos (warnings) para lançar exceções de tipo (TypeError) ou erros fatais quando recebem argumentos inválidos (como passar um valor null para uma função que espera uma string).

PASSO 1: COMO DESCOBRIR O ERRO EXATO (REMOVER O ECRÃ BRANCO)

Para corrigir o erro, primeiro precisamos de saber o que o PHP está a reportar nos bastidores. O ecrã branco acontece porque a diretiva display_errors está desligada por motivos de segurança no seu servidor de alojamento.

Para forçar a exibição do erro técnico, siga estes passos:

Abra o ficheiro index.php na diretoria raiz do seu fórum através de FTP ou do Gestor de Ficheiros do cPanel.
Logo após a tag de abertura do PHP , adicione as seguintes linhas de código:

ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

Guarde o ficheiro e recarregue a página do seu fórum. Em vez de uma página em branco, verá agora uma mensagem de erro detalhada indicando o ficheiro exato, a linha e o motivo do erro (por exemplo: Fatal error: Uncaught Error: Call to undefined function create_function() in /Sources/Subs-Db-mysql.php on line...).

A SOLUÇÃO IDEAL E RECOMENDADA: ATUALIZAR PARA O SMF 2.1.X

Como programador core e administrador sénior de fóruns, a minha recomendação oficial é categórica: deve atualizar o seu fórum para o SMF 2.1.x o mais rápido possível.

A versão 2.1.x do Simple Machines Forum foi totalmente reescrita e otimizada para suportar nativamente as versões modernas do PHP, incluindo o PHP 8.0 e PHP 8.1. Além de resolver de vez todos os problemas de compatibilidade, o SMF 2.1 traz melhorias drásticas de segurança, um sistema de notificações moderno, suporte nativo a emojis, design responsivo para telemóveis e melhorias significativas no SEO.

Para atualizar com segurança:
  • Faça um backup completo da sua base de dados e de todos os ficheiros via cPanel.
  • Descarregue o pacote "Large Upgrade" do SMF 2.1.x no site oficial do Simple Machines.
  • Extraia os ficheiros e envie-os por FTP para o seu servidor, substituindo os ficheiros antigos (com a exceção do Settings.php e Settings_bak.php).
  • Execute o script upgrade.php no seu navegador (ex: seusite.com/forum/upgrade.php) e siga as instruções no ecrã.

A SOLUÇÃO TEMPORÁRIA: APLICAR PATCHES MANUAIS NO SMF 2.0

Se por algum motivo de força maior (como modificações pesadas ou temas altamente customizados que não quer perder de imediato) tiver de manter o SMF 2.0, terá de aplicar as correções manualmente.

A última versão estável da árvore antiga, o SMF 2.0.19, introduziu compatibilidade preliminar com versões mais recentes do PHP (até ao PHP 8.0). Se o seu fórum está numa versão como a 2.0.15 ou inferior, terá de atualizar passo a passo até à 2.0.19 usando o Gestor de Pacotes do SMF, ou aplicar os patches manualmente nos ficheiros das Sources/.

Aqui está como corrigir manualmente um dos erros mais comuns de incompatibilidade no ficheiro Sources/Load.php ou Sources/Subs.php relativos à sintaxe obsoleta:

Substitua instâncias de acesso com chavetas:
// Código Antigo Incompatível
$txt{'error_message'} = 'Erro';

Pela sintaxe de parênteses retos compatível com PHP 8.x:
// Código Corrigido e Moderno
$txt['error_message'] = 'Erro';

Para erros com create_function(), a lógica terá de ser reescrita para funções anónimas nativas (Arrow Functions ou Anonymous Functions do PHP 7/8). Exemplo genérico:

// Código Antigo
$func = create_function('$a, $b', 'return strlen($b) - strlen($a);');

// Código Novo Compatível
$func = function($a, $b) {
    return strlen($b) - strlen($a);
};

Lembre-se que aplicar patches manuais em dezenas de ficheiros do SMF 2.0 é um processo moroso, propenso a falhas e que apenas adia o problema inevitável. A migração para o SMF 2.1.x continua a ser a única solução 100% segura a longo prazo.

CONCLUSÃO E PRÓXIMOS PASSOS

Manter o seu fórum seguro e rápido exige que acompanhe as atualizações tecnológicas da própria internet. O PHP 8.x traz uma velocidade de processamento incrível, mas exige um código limpo e moderno. Se se deparou com o ecrã branco, aproveite esta oportunidade para modernizar a sua comunidade, limpando mods antigos que já não usa e migrando para a versão mais estável e segura do SMF.

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.