Après avoir joué avec WordPress 2.0.4 pour le compte du Centre de Kriya Yoga France et questionné à ce sujet par creatix, je me suis mis en tête de mettre le blog à jour. Mais quitte à mettre à jour, autant le faire proprement, c’est à dire de manière pérenne. J’ai donc étudié les nouvelles fonctions apportées par WP2+ et j’ai pu me défaire d’au moins 5 ou 6 plugins dont les fonctions sont maintenant inclues par défaut dans WordPress. Mais ce n’est pas tout : ma base de données WP 1.5+ était encodée en iso-8859-15 (caractères de l’Europe de l’Ouest, avec le symbole Euro), ce qui était bien en 2004 mais qui ne l’est plus en 2006. Hé oui, les temps changent et les encodages de caractères avec eux !
Place donc à l’UTF-8, un codage qui se veut universel (il permet de représenter des milliers de caractères de toutes sortes de langues, dont l’ensemble des caractères spécifiques français), compatible (un texte en US-ASCII est codé identiquement en UTF-8) et visant l’interopérabilité (chaque caractère est codé sur une suite de un à quatre octets ; UTF-8 a été conçu pour être compatible avec certains logiciels originellement prévus pour traiter des caractères d’un seul octet).
Le plus délicat est de convertir les données iso-8859-15 accentuées en données UTF-8 avec les différents accents codés sur les fameux 4 octets. Pour effectuer cette conversion, voici les étapes que j’ai fini par trouver, après plusieurs exports/imports de ma base.
J’ai essayé plusieurs manière d’uploader le fichier : en mode UTF-8, en mode binaire, en mode ASCII et je crois que c’est ce dernier qui a finalement fonctionné comme attendu. A vrai dire, cela m’a quasiment pris une journée mais au final je suis content d’avoir migré cette base. Mieux vaut le faire lorsqu’elle pèse 5 Mo plutôt que dans quelques années lorsqu’elle en fera 50…
Petite surprise une fois la migration effectuée : je suis tombé sur l’erreur suivante, inconnue du bataillon :
Warning : Invalid argument supplied for foreach() in /home/mjbiscay/public_html/wp2/wp-includes/capabilities.php on line 19
Cette jolie erreur est un petit cauchemar puisqu’elle prive l’administrateur… du droit d’administrer. En gros, WordPress vous reconnaît comme utilisateur, il sait que vous êtes admin mais il attend de vous une poignée de main magique : oui, encore du SQL ! Pendant l’importation des tables, une valeur – une chaîne très longue – est mal passée. Il va donc falloir l’éditer à la main :
a:5:{s:13:"administrator";a:2:{s:4:"name";s:13:"Administrator";s:12:"capabilities";a:30:{s:13:"switch_themes";b:1;s:11:"edit_themes";b:1;s:16:"activate_plugins";b:1;s:12:"edit_plugins";b:1;s:10:"edit_users";b:1;s:10:"edit_files";b:1;s:14:"manage_options";b:1;s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:6:"import";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:8:"level_10";b:1;s:7:"level_9";b:1;s:7:"level_8";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;}}s:6:"editor";a:2:{s:4:"name";s:6:"Editor";s:12:"capabilities";a:19:{s:17:"moderate_comments";b:1;s:17:"manage_categories";b:1;s:12:"manage_links";b:1;s:12:"upload_files";b:1;s:15:"unfiltered_html";b:1;s:10:"edit_posts";b:1;s:17:"edit_others_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:10:"edit_pages";b:1;s:4:"read";b:1;s:7:"level_7";b:1;s:7:"level_6";b:1;s:7:"level_5";b:1;s:7:"level_4";b:1;s:7:"level_3";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;}}s:6:"author";a:2:{s:4:"name";s:6:"Author";s:12:"capabilities";a:8:{s:12:"upload_files";b:1;s:10:"edit_posts";b:1;s:20:"edit_published_posts";b:1;s:13:"publish_posts";b:1;s:4:"read";b:1;s:7:"level_2";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;}}s:11:"contributor";a:2:{s:4:"name";s:11:"Contributor";s:12:"capabilities";a:4:{s:10:"edit_posts";b:1;s:4:"read";b:1;s:7:"level_1";b:1;s:7:"level_0";b:1;}}s:10:"subscriber";a:2:{s:4:"name";s:10:"Subscriber";s:12:"capabilities";a:2:{s:4:"read";b:1;s:7:"level_0";b:1;}}}
J’ai effectué toutes ces opérations en utilisant SQLFront pour la simple raison qu’il est beaucoup plus rapide pour importer les données (et qu’il les a importé correctement, ce qui est loin d’être évident avec PHPmyadmin) et qu’il est très aisé de modifier les valeurs de champs (un clic suffit). A vous de voir ce qui vous convient le mieux. PHPmyadmin est certainement installé sur votre serveur. SQLFront – anciennement MySQL-Front – est à installer sur votre machine.
Voilà, une bonne chose de faite même si cela ne change absolument rien à la présentation générale du blog. Tout se passe sous le capot mais il est bon de vérifier les rouages de temps à autre. Et maintenant je suis tranquille pour un bon petit moment ;-)
oui c’est une qualamité les changements d’encodages :) ba bravo alors pour la migration, ça allégera peut etre wordpress les 5-6 plugins en moins ;)
Oui, je dois dire que cette nouvelle version est très agréable à utiliser, une fois que l’éditeur HTML enrichi a été désactivé. C’est fou ce que cela peut foirer comme code… Je suis très content d’avoir installé SQLFront, cela fait gagner un temps considérable ^_^
Merci merci, grace à ton aide me voila sortie de la panade qui durait depuis plusieurs jours…sacré “capabilities.php”, une question me taraude, comment as tu pu trouver d’oucette erreur provenait ? chapeau bas !
tu es mon miracle du jour ! ;o)
(je vais m’attaquer au problemes d’accents qui semblent avoir souffert lors de la migration ;o)
Content de pouvoir t’aider shmileblik :)
Pour résoudre l’erreur, je me suis penché sur le compte administrateur et ses privilèges/droits. C’est comme cela que je me suis rendu compte qu’il y avait un champs de la base de données qui n’était pas conforme.
Merci beaucoup ! J’avais exactement ce probleme et il est parfaitement résolu en suivant votre explication ! :-)
Ketah.
Content que cela marche pour vous Ketah :)
Salut !
Merci beaucoup pour l’astuce de l’import sql en binaire, çà m’a sauvé !!
J’ai exporté pourtant d’une base UTF 8 vers une nouvelle UTF8, mais des problèmes d’accents, exportés en ISO 8859-1 persistait !
Bonne continuation !
@anthony : je t’en prie.