ワードプレスのDBのテーブルに記録されている特殊なデータ形式a: s:を含むシリアライズデータについて解説いたします。

ワードプレスのデータベースに含まれる特殊なデータ

ワードプレスのwp-optionテーブルを見てみると、かなりの頻度で下記のようなa: s:などを含むデータがあることがわかります。

a:7:{i:0;s:51:"all-in-one-wp-migration/all-in-one-wp-migration.php";i:1;s:51:"allow-multiple-accounts/allow-multiple-accounts.php";i:2;s:59:"custom-post-type-permalinks/custom-post-type-permalinks.php";i:3;s:43:"custom-post-type-ui/custom-post-type-ui.php";i:4;s:29:"pdf-embedder/pdf_embedder.php";i:5;s:33:"post-expirator/post-expirator.php";i:6;s:37:"user-role-editor/user-role-editor.php";}

このデータはシリアライズデータと呼ばれ、配列を文字列に変換したもので、そのまま編集するとデータが壊れることもあり、変更したい部分だけを編集することはお勧めいたしません。

シリアライズデータとは?

シリアライズデータとは、基本的には配列を記録しやすいように文字列に変換したものです。
PHPでは下記のようにシリアライズデータを作ることができます。

$testdata = new testdata("Scott", "aaaaa@test-warren.com", "Monkey1234!");
echo serialize($testdata);

↓ 生成される文字列データ

o:8:"testdata":3:{s:4:"name";s:5:"Scott";s:5:"email";s:21:"aaaaa@test-warren.com";s:8:"password";s:11:"Monkey1234!";}

シリアライズデータをもとの配列データに戻すにはunserialize()を使用します

$arraydata = unserialize($serializedtestdata);

シリアライズデータの各識別子の意味を見ていきましょう

o:8 オブジェクト形式の8文字の名前(testdata)が付いた配列であること示します(一般的な配列の場合a:になります)
:3: 3つの要素を含む配列であることを示します
s:4 文字列4文字を示します(数の場合i:になります)

シリアライズデータを編集するとデータが壊れる理由

上記のデータを例えば下記のように編集したとします。

o:8:"testdata":3:{s:4:"name";s:5:"Scott Scott";s:5:"email";s:21:"aaaaa@test-warren.com";s:8:"password";s:11:"Monkey1234!";}

s:5:”Scott Scott”; は11文字なのにsの文字数を示す部分の数は5になっています。このように文字数がずれるとシリアライズデータは読み込んで、元の配列を戻すことができなくなります。

こちらが、シリアライズデータの直接編集によってデータが壊れる理由です。

シリアライズデータを編集するには?

シリアライズデータは直接編集することは推奨されませんが、上記のようにSなどの文字列の数の部分も編集するとうまく編集できる場合はございます。
(編集に失敗するとワードプレスの設定データが消えてしまうこともあり、データベースのバックアップの上編集されることをお勧めいたします。)

その他の方法として、実際にプログラムを組んで、配列を定義し、シリアライズ関数を使用して文字列を生成してそれを使うなどの方法もございます。

シリアライズデータに対応したデータベース置き換えプログラムとしてSearch replace DBというPHPソフトウェアもございます。

WordPress ワードプレスのカスタマイズ、トラブル対応、バグフィックス、修正、復旧のご依頼・ご相談はWPドクターまでお気軽にお送りください