web-dev-qa-db-fra.com

Vous ne pouvez pas désérialiser les valeurs sérialisées de Wordpress dans la table `wp_options`?

J'ai nav_menu_options dans ma base de données Wordpress comme ci-dessous.

284,'nav_menu_options','a:2:{i:0;b:0;s:8:\"auto_add\";a:0:{}}'

J'ai essayé de désérialiser cette valeur, mais le résultat est une chaîne vide - je mets un extrait de code dans <my theme>/function.php comme ci-dessous

echo 'TRY #1'.'<br>';
$v = 'a:2:{i:0;b:0;s:8:\"auto_add\";a:0:{}}';
$d = unserialize($v);
print_r($d);
echo 'TRY #1 end'.'<br>';

echo 'TRY #2'.'<br>';
$v ='a:5:{s:9:"engine_id";a:1:{i:0;s:9:"300000225";}s:15:"transmission_id";a:1:{i:0;s:6:"257691";}s:5:"plant";a:1:{i:0;s:23:"Oshawa, Ontario, Canada";}s:15:"Manufactured in";a:1:{i:0;s:6:"CANADA";}s:22:"Production Seq. Number";a:1:{i:0;s:6:"151411";}}';
$d = unserialize($v);
print_r($d);
echo 'TRY #2 end'.'<br>';

Le résultat du code ci-dessus est comme ci-dessous.

@ 1 la valeur de Worpdress désérialisée est vide.

@ 2 Un exemple de valeur sérialisée valide résulte en un tableau lisible.

 enter image description here 

Donc, ma question est Pourquoi ne pouvons-nous pas désérialiser les valeurs sérialisées de Wordpress? - Ceci est également posté sur wordpress.org ici .

p.s.

1) Une étude plus approfondie du code Wordpress montre que nous pouvons "décoder" la valeur discutée en utilisant la commande get_option('nav_menu_options');.

2) La valeur de nav_menu_options correspond aux données réelles copiées à partir de la base de données.

 enter image description here 

1
Nam G VU

Votre problème est que les chaînes sérialisées contiennent des barres d'échappement qui ne sont pas évaluées en tant que telles, car wrapping quote est un guillemet simple.

Vous utilisez:

$v = 'a:2:{i:0;b:0;s:8:\"auto_add\";a:0:{}}'; // wrong

Vous devez utiliser soit

$v = "a:2:{i:0;b:0;s:8:\"auto_add\";a:0:{}}"; // ok

ou

$v = 'a:2:{i:0;b:0;s:8:"auto_add";a:0:{}}'; // ok

Au fait, vous ne devriez jamais manuellement unserialize dans la base de données WordPress.

Lorsque vous devez obtenir une option (ou des métadonnées, ou tout ce qui peut être sérialisé), utilisez les fonctions WP: elles désérialisent la valeur en cas de besoin.

Par exemple. pour les options, utilisez get_option .

Si vous êtes intéressé par la désérialisation de WordPress, voir maybe_unserialize et is_serialized .

5
gmazzap