過去5時間これにいて、私は困惑しています。最もばかげた機能を試して修正しようとしましたが、役に立ちませんでした。
WP データベースからデータを取得しています。serialize()
データには、挿入前に、PHPの関数を使用してシリアル化された 1 つの配列がありました。次に、WP 関数を使用して WP データベースに挿入されますupdate_user_meta
。この関数の参照は次のように述べています。
$meta_value
(mixed) (required) The new desired value of the meta_key, which must be different from the
existing value. Arrays and objects will be automatically serialized.
Note that using objects may cause this bug to popup.
Default: None
これにより、データが2回シリアル化された可能性があると思いました。、 、 、およびこれらの組み合わせなどunserialize()
、多くの機能を実行しましたが、以下を取得しました。array_map
json_decode
$i = 0;
while($i < count($fbData)){
$someValue = $fbData[$i]['meta_value'];
$usermeta = array_map( function( $a ){ return $a[0]; }, get_user_meta( $fbData[$i]['user_id'] ));
if( $usermeta['facebookmeta'] ){
$unserialized = unserialize( $usermeta['facebookmeta'] );
//other methods tried: unserialize( unserialize
// unserialize( json_decode(
// json_decode( unserialize( json_decode(
// json_decode( unserialize(
// unserialize( array_map(
// unserialize( array_map( json_decode
// whole lot others
var_dump( $unserialized );
}
$i++;
}
ただし、これは機能しません。これは次のようになり$fbData
ます:
'facebookmeta' => string 's:668:"a:16:{s:2:"id";s:9:"123456";s:4:"name";s:12:"Henkie";s:10:"first_name";s:4 //and so on
結果は次のとおりです。
string 'a:16:{s:2:"id";s:9:"123456";s:4:"name";s:12:"Henkie";s:10:"first_name";s:4: //and so on
結果からわかるようにs:668:"
、先頭から " " を削除するだけです。これは、668 文字の文字列であることを示し、残りはそのまま残します。
アンシリアライゼーションが正しく機能しないのはなぜですか?