Impossible de rentrer dans Moodle.

Re: Impossible de rentrer dans Moodle.

par Ioura Batugowski,
Nombre de réponses : 11

Bonsoir,

Je viens d'être confronté au même problème en mettant à jour vers Moodle 3.5.5+

Dans mon cas c'était une valeur de configuration 'dbcollation' erronée qui restait dans config.php:

$CFG->dboptions = array (
  'dbcollation' => 'utf8_unicode_ci',
  ...
);

Elle était déjà présente avant la mise à jour, et la base était déjà convertie en utf8mb4, mais étonnamment le problème ne s'était pas manifesté avant cette mise à jour. Je l'ai changée en utf8mb4_unicode_ci et le problème est résolu.

Si ce n'est pas ça, jetez un œil sur lib/dml/mysqli_native_moodle_database.php; en particulier les méthodes get_dbcollation et connect (c'est cette dernière qui m'a mis sur la voie). L'erreur ne se situe sans doute pas dans la base de données, mais dans la requête SQL générée par moodle.

En réponse à Ioura Batugowski

Re: Impossible de rentrer dans Moodle.

par Raymi Phénix,

Merci 
Le fichier config est bon.
Ce qui est drôle c'est que le fichier config de base me met l'erreur
et le fichier config-dist.php ne me met pas d'erreur juste : ErreurLa connexion a échoué, veuillez réessayer
très étrange cette histoire...

En réponse à Raymi Phénix

Re: Impossible de rentrer dans Moodle.

par Ioura Batugowski,

Si ça peut vous aider, voici où j'en été arrivé dans mon débogage. Malheureusement comme c'est un serveur de prod, je n'avais pas les outils de débogage dessus.

C'est le "COLLATE utf8_bin" dans la requête qui est incorrect. Cette partie de la requête est générée dans la méthode sql_equal() dans mysqli_native_moodle_database.php. Celle-ci fait appel à get_dbcollation() (dans la même classe). Un test à faire serait de coder en dur une valeur de retour (insérer return 'utf8mb4_unicode_ci'; comme première ligne) dans get_dbcollation(). Si cela fonctionne, c'est que le problème vient bien de là...

La valeur retournée peut provenir soit de config.php (ce qui était mon cas), soit de la première des requêtes suivantes qui fonctionne:

  1. SELECT collation_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE() AND table_name = 'mdl_config' AND column_name = 'value'
  2. SELECT @@collation_database
  3. SHOW COLLATION WHERE Collation LIKE 'utf8mb4\_%' AND Charset = 'utf8mb4'

Je ne sais pas si ça vous aidera, mais j'avais exactement le même symptôme donc le diagnostic ne devrait pas être trop différent...

En réponse à Raymi Phénix

Re: Impossible de rentrer dans Moodle.

par Nicolas Martignoni,
Avatar Développeurs Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Pas du tout étrange, mais tout à fait normal au contraire: le fichier config-dist.php ne connaît pas les identifiants de la BDD, donc ne peut pas se connecter.

En réponse à Nicolas Martignoni

Re: Impossible de rentrer dans Moodle.

par Raymi Phénix,

Il me semblais qu'il fallait renseigner config-dist.php et le mettre en config.php.
est ce bien cela ? Merci

En réponse à Raymi Phénix

Re: Impossible de rentrer dans Moodle.

par Nicolas Martignoni,
Avatar Développeurs Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Oui, mais si vous laissez faire l'installeur de Moodle, il créera lui-même un fichier config.php, sans risque d'erreur (et sans toucher config-dist.php, toujours utile à titre de référence).

En réponse à Nicolas Martignoni

Re: Impossible de rentrer dans Moodle.

par Raymi Phénix,

je crois que je bugg moi aussi.
Je suis allé sur les pistes, rapatrié en local moodle, téléchargé la base et la verifier :

Search "utf8_unicode_ci" (0 hits in 0 files)
Search "utf8_bin" (0 hits in 0 files)

Tout est bien en "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;"

Donc apparemment le problème vient d’ailleurs... Mais d'ou ?

En réponse à Raymi Phénix

Re: Impossible de rentrer dans Moodle.

par Ludovic ORNON,

Bonjour,

De ce que je comprends de:

Debug info: COLLATION 'utf8_bin' is not valid for CHARACTER SET 'utf8mb4'
SELECT * FROM mdl_user WHERE LOWER(username) COLLATE utf8_bin = LOWER(?) AND deleted <> 1 AND mnethostid = ?
[array (
0 => 'xavier57',
1 => '1',
)]
Error code: dmlreadexception

la collation demande un utf8_bin alors que la donnée est un utf8mb4. Je pense que la clé se trouve dans le config.php comme dit précédemment.

Mes options :

$CFG->dboptions = array (
  'dbpersist' => 0,
  'dbport' => '',
  'dbsocket' => '',
  'dbcollation' => 'utf8mb4_general_ci',
);

J'espere que cela peut aider,

Ludovic

En réponse à Ludovic ORNON

Re: Impossible de rentrer dans Moodle.

par Ludovic ORNON,

Peut-être que ce post sur le forum anglais peut t'aider :

Permalink

En réponse à Ludovic ORNON

Re: Impossible de rentrer dans Moodle.

par Raymi Phénix,

Merci beaucoup
Finalement j'ai fait appel à Antonio de Joomdle qui m'a fait le travail.
Apparemment c’était pas simple et il a chercher pendant un bon moment.
Je lui ai demandé ce qu'il avait fait mais pour le moment je n'ai pas de réponses.
Merci à vous tous.

Raymi

En réponse à Raymi Phénix

Re: Impossible de rentrer dans Moodle.

par Raymi Phénix,

Le problème de la base de données a été résolu en modifiant le fichier config.php de Moodle :

$CFG->dboptions = array (
  'dbpersist' => 0,
  'dbport' => '',
  'dbsocket' => '',
  'dbcollation' => 'utf8mb4_unicode_ci',
);

Merci encore à tous pour vos réponses et votre aide.

Bien à vous 

Raymi