(https://www.webmastersmz.com/webmzpic/uploads/e98a125db099b50d.png)
Sim, o ficheiro que enviaste (Subs-Db-mysql.php) é exatamente o motor que processa todas as comunicações entre o SMF e a tua base de dados MySQL.
O erro "Wrong value type sent to the database. IPv4 or IPv6 expected.(ip)" que estás a receber é gerado especificamente dentro da função smf_db_replacement__callback, no bloco que lida com o tipo de dado inet.
Aqui está a análise técnica do porquê de o erro continuar no teu servidor:
A função isValidIP($replacement) está a falhar. Como usas Cloudflare, o IP pode estar a chegar vazio ou num formato que o PHP 8 não valida como um IP real (como uma string "unknown"). Quando isso acontece, o SMF interrompe a execução com o erro crítico em vez de tentar usar um valor padrão.
3. Como corrigir este ficheiro agora
Para resolver isso de forma definitiva e "forçar" o fórum a funcionar mesmo quando a detecção de IP falha, deves alterar o bloco case 'inet' e o case 'array_inet'.
Substitui as linhas 310 a 316 pelo seguinte código:
case 'inet':
if ($replacement == 'null' || $replacement == '')
return 'null';
// Se o IP não for válido, forçamos um IP padrão para não quebrar a query
if (!isValidIP($replacement))
$replacement = '127.0.0.1';
return sprintf('unhex(\'%1$s\')', bin2hex(inet_pton($replacement)));
case 'array_inet':
if (is_array($replacement))
{
if (empty($replacement))
smf_db_error_backtrace('Database error, given array of IPv4 or IPv6 values is empty. (' . $matches[2] . ')', '', E_USER_ERROR, __FILE__, __LINE__);
foreach ($replacement as $key => $value)
{
if ($value == 'null' || $value == '')
$replacement[$key] = 'null';
elseif (!isValidIP($value))
$replacement[$key] = sprintf('unhex(\'%1$s\')', bin2hex(inet_pton('127.0.0.1')));
else
$replacement[$key] = sprintf('unhex(\'%1$s\')', bin2hex(inet_pton($value)));
}
return implode(', ', $replacement);
}
else
smf_db_error_backtrace('Wrong value type sent to the database. Array of IPv4 or IPv6 expected. (' . $matches[2] . ')', '', E_USER_ERROR, __FILE__, __LINE__);
break;Outro detalhe importante: SQL Mode
Reparei que na linha 95 do teu ficheiro, o SMF força o STRICT_TRANS_TABLES:
mysqli_query($connection, 'SET SESSION sql_mode = \'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT\'');Sugestão: Se a alteração no case 'inet' não bastar, podes remover o ,STRICT_TRANS_TABLES dessa linha 95 para tornar a conexão mais tolerante a erros de dados.
Aplica a alteração no bloco case 'inet' primeiro. Isso vai impedir o smf_db_error_backtrace de ser disparado e o fórum voltará a abrir imediatamente.