Comment résoudre l’erreur « Call to undefined function sodium_bin2base64() » sur WordPress avec Gandi

Posté le 17 décembre 2025 by

Si vous utilisez WordPress sur un hébergement mutualisé Gandi et que vous rencontez l’erreur “Call to undefined function sodium_bin2base64()”, vous n’êtes pas seul. Cette erreur survient principalement lorsque votre version de PHP est compatible mais que la librairie libsodium installée sur le serveur est trop ancienne pour la version de WordPress que vous utilisez. Voici un guide détaillé pour comprendre et corriger ce problème.

Pourquoi cette erreur survient

WordPress utilise depuis plusieurs versions la librairie libsodium pour la sécurité, notamment pour le chiffrement et la gestion des clés. La fonction sodium_bin2base64() a été introduite dans libsodium 1.0.14.

Or, sur certains hébergements Gandi, notamment ceux utilisant PHP 8.3 avec MySQL 5.6, la version installée de libsodium est souvent 1.0.11. Cela provoque l’erreur ci-dessus lorsque WordPress tente d’utiliser cette fonction.

Il est important de noter que Gandi propose libsodium 1.0.18, mais uniquement si votre hébergement utilise MySQL 5.7 ou supérieur. Ainsi, les clients avec des configurations anciennes (MySQL 5.6) peuvent rencontrer cette incompatibilité.

Confirmer le problème

Voici un script de test, que vous pouvez charger dans un fichier test-sodium.php afin de confirmer que votre problème est identique.

<?php
/**
 * Test simple de libsodium 
 */
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

echo '<pre>';

// Vérifie si l’extension sodium est chargée
echo "Extension sodium chargée :\n";
var_dump(extension_loaded('sodium'));

echo "\n";

// Vérifie si la fonction sodium_bin2base64() existe
echo "Fonction sodium_bin2base64() disponible :\n";
var_dump(function_exists('sodium_bin2base64'));

echo "\n";

// Test d'exécution sans constante
if (function_exists('sodium_bin2base64')) {
    echo "Test d'encodage avec sodium_bin2base64() :\n";
    $data = 'test-wordpress-gandi';

    // Le second paramètre doit être un entier, 0 correspond au variant original
    $encoded = sodium_bin2base64($data, 0);
    var_dump($encoded);
} else {
    echo "La fonction sodium_bin2base64() n'est pas disponible.\n";
}

echo '</pre>';

Résultat attendu

  • true / true → environnement compatible avec WordPress récent
  • true / false → libsodium présent mais trop ancien (ex. 1.0.11 sur MySQL 5.6)
  • false / false → extension sodium absente

Résoudre le problème seul et rapidement avec un patch PHP

Code à ajouter dans votre environnement wordpress, soit dans un plugin obligatoire (must-use = mu-plugin), soit dans un fichier php (par ex. wp-config.php ou mieux functions.php de votre thème).

<?php
// Fallback pour hébergement mutualisé Gandi avec libsodium sans Base64

if (!defined('SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING')) {
    define('SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING', 5);
}

if (!function_exists('sodium_bin2base64')) {
    function sodium_bin2base64(string $bin, int $variant): string {
        if ($variant !== SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING) {
            throw new RuntimeException('Variant sodium non supporté');
        }
        return rtrim(strtr(base64_encode($bin), '+/', '-_'), '=');
    }
}

if (!function_exists('sodium_base642bin')) {
    function sodium_base642bin(string $b64, int $variant): string {
        if ($variant !== SODIUM_BASE64_VARIANT_URLSAFE_NO_PADDING) {
            throw new RuntimeException('Variant sodium non supporté');
        }
        $b64 = strtr($b64, '-_', '+/');
        return base64_decode($b64);
    }
}

Dans tous les cas nous vous invitons également à procéder à la mise à jour de votre environnement avec le support Gandi (lire ci-après)

Résoudre le problème avec le support Gandi

Contactez le support Gandi. Ils peuvent :

  • Vérifier la version de libsodium installée sur votre hébergement.
  • Proposer la mise à jour vers un environnement compatible.

Cet article vous a été utile ?

Vous rencontrez un autre problème ? Dites le nous en commentaire !

Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *