Corriger les données sérialisées brisées à cause de la modification de la base de données MySQL dans un éditeur de texte?
De fond: j'ai téléchargé un *.sql sauvegarde de mon site WordPress de base de données, et l'a remplacé toutes les instances de l'ancienne base de données préfixe de table avec un nouveau (par exemple à partir de la valeur par défaut wp_
à quelque chose comme asdfghjkl_
).
J'ai juste appris que WordPress utilise sérialisé chaînes de PHP dans la base de données, et ce que je n'auront gâché avec de l'intégrité de la chaîne sérialisée longueurs.
La chose est, j'ai supprimé le fichier de sauvegarde juste avant que j'ai appris sur ce sujet (comme mon site fonctionnait encore très bien), et installé un certain nombre de plugins depuis. Donc, il n'y a aucun moyen que je peux revenir en arrière, et donc je voudrais savoir deux choses:
- Comment puis-je résoudre ce problème, si c'est possible?
- Ce genre de problèmes que cela pourrait-il provoquer?
(Cet article états qui, d'un blog WordPress par exemple, pourrait perdre ses paramètres et de widgets. Mais cela ne semble pas avoir eu lieu pour moi que tous les paramètres de mon blog sont encore intacts. Mais je n'ai pas la moindre idée de ce qui pourrait être cassé à l'intérieur, ou quelles sont les questions qu'il faudrait poser à l'avenir. D'où cette question.)
source d'informationauteur its_me
Vous devez vous connecter pour publier un commentaire.
Visiter cette page: http://unserialize.onlinephpfunctions.com/
Sur cette page, vous devriez voir cet exemple de chaîne sérialisée:
a:1:{s:4:"Test";s:17:"unserialize here!";}
. Prendre un morceau d'elle -s:4:"Test";
. Que signifie "chaîne", de 4 caractères, puis de la chaîne. Je suis assez sûr que ce que vous avez fait est causé le caractère numérique compter jusqu'à être hors de synchronisation avec la chaîne. Jouer avec l'outil sur le site mentionné ci-dessus et vous verrez que vous obtenez un message d'erreur si vous changez de "Test" à "Tes", par exemple.Ce que vous devez faire pour obtenir ces caractères figurant pour correspondre à votre nouvelle chaîne. Si vous n'avez pas endommagé l'un de l'autre encodage-- retiré du côlon ou de quelque chose, ça devrait résoudre le problème.
J'ai ce même problème après avoir essayé de changer le domaine de localhost pour l'URL réelle. Après quelques recherches, j'ai trouvé la réponse dans la documentation de WordPress:
https://codex.wordpress.org/Moving_WordPress
Je vais citer ce qui y est écrit:
J'ai fini par utiliser WP-CLI qui est en mesure de remplacer les choses dans la base de données sans se casser la sérialisation: http://wp-cli.org/commands/search-replace/
Essayer ce script qui corrige la sérialisation:
https://github.com/Blogestudio/Fix-Serialization
Je sais que c'est une vieille question, mais mieux vaut tard que jamais, je suppose. J'ai rencontré ce problème récemment, après avoir hérité d'une base de données qui avait fait un rechercher/remplacer exécutées sur les données sérialisées. Après de nombreuses heures de recherches, j'ai découvert que c'était parce que la chaîne les chiffres étaient hors tension. Malheureusement, il y avait beaucoup de données avec beaucoup de s'échapper et de retours à la ligne et je ne sais pas comment compter, dans certains cas, et j'ai eu tellement de données que j'ai besoin de quelque chose d'automatisé.
Le long du chemin, je suis tombé sur cette question et Benubird post a aidé à me mettre sur le droit chemin. Son exemple de code ne fonctionne pas dans une utilisation en production sur des données complexes, contenant de nombreux caractères spéciaux et HTML, avec de très profondes niveaux d'imbrication, et il n'a pas de traiter correctement certains caractères d'échappement et d'encodage. J'ai donc modifié un peu et passé d'innombrables heures de travail par le biais de bugs supplémentaires pour obtenir ma version de "réparer" les données sérialisées.
Un peu geek explication sur mes modifications:
Espère que cela aide quelqu'un... m'a fallu près de 20 heures, y compris la recherche et de traiter avec des problèmes bizarres! 🙂
Si l'erreur est due à la longueur des chaînes de caractères incorrects (quelque chose que j'ai vu souvent), alors vous devriez être en mesure d'adapter ce script pour résoudre le problème:
Personnellement, je n'aime pas travailler en PHP, ou en plaçant ma DB informations d'identification dans un dossier public. J'ai créé un script ruby pour fixer serializations que vous pouvez exécuter localement:
https://github.com/wsizoo/wordpress-fix-serialization
Contexte Edit:
Je me suis approché de la fixation de la sérialisation en déterminant d'abord la sérialisation via des regex, puis à recalculer la taille en octets de la chaîne de données.
Je puis mettre à jour les données spécifiées par le biais d'un échappé de la requête sql update.
Ce script (https://interconnectit.com/products/search-and-replace-for-wordpress-databases/) peut aider à mettre à jour une base de données sql avec la bonne Url de partout, sans rencontrer de données sérialisées questions, car il mettra à jour les "caractères compte" qui pourrait jeter votre Url de synchronisation chaque fois que des données sérialisées se produit.
Les étapes seraient:
si vous avez déjà importé une foiré base de données (widgets pas
de travail, les options du thème, etc), il suffit de déposer la base de données
à l'aide de PhpMyAdmin. C'est, de supprimer tout ce qu'il. Ensuite, l'exportation et le
avoir à portée de main une liste non-édité dump de l'ancienne base de données.
Maintenant, vous devez importer le (non modifiés) dans l'ancienne base de données
nouvellement créé. Vous pouvez le faire via une importation, ou de copier sur les
la db à partir de PhpMyAdmin. Notez que jusqu'à présent, nous n'avons pas fait tout
rechercher et remplacer pour l'instant, nous avons juste une ancienne base de données de contenu et
la structure dans une nouvelle base de données avec son propre utilisateur et mot de passe. Votre site sera probablement inaccessibles à ce point.
bon dossier sur le serveur, et de modifier votre wp-config.php pour le faire
se connecter avec la nouvelle base de données.
raisons - au même niveau que le wp-admin, wp-content et wp-includes. Ne pas oublier d'enlever une fois de la recherche et de l'
remplacez ont eu lieu, parce que tu risques d'offrir à votre DB détails
ouvert à l'ensemble d'internet.
de l'interface. Il est très explicite. Une fois utilisé, nous procédons à
complètement le supprimer du serveur.
Ce qui devrait avoir votre base de données mise à jour correctement, sans aucune données sérialisées questions autour de: la nouvelle adresse sera mis de partout, et les données sérialisées caractères compte sera mis à jour en conséquence.
Les Widgets s'être passé, et les paramètres de thème ainsi, deux des endroits typiques que l'utilisation de données sérialisées dans WordPress.
Fait et testé solution!