シリアル化された配列(serialize($ array)を実行して作成された)を含むファイル「serialized.txt」があります。
s:133:"a:7:{i:0;i:640;i:1;i:480;i:2;i:2;i:3;s:24:"width="640" height="480"";s:4:"bits";i:8;s:8:"channels";i:3;s:4:"mime";s:10:"image/jpeg";}";
私が行うコンテンツを取得するには:
$string = file_get_contents("serialized.txt");
それから私は:
print_r(unserialize($string));
私が得る出力:
a:7:{i:0;i:640;i:1;i:480;i:2;i:2;i:3;s:24:"width="640" height="480"";s:4:"bits";i:8;s:8:"channels";i:3;s:4:"mime";s:10:"image/jpeg";}
これは、シリアル化されていない配列を出力する必要がある場合の文字列 (ファイルの内容) のシリアル化されていないバージョンです。文字列をコピーして次の操作を行う場合:
print_r(unserialize('a:7:{i:0;i:640;i:1;i:480;i:2;i:2;i:3;s:24:"width="640" height="480"";s:4:"bits";i:8;s:8:"channels";i:3;s:4:"mime";s:10:"image/jpeg";}'));
正しい出力が得られます:
Array
(
[0] => 640
[1] => 480
[2] => 2
[3] => width="640" height="480"
[bits] => 8
[channels] => 3
[mime] => image/jpeg
)
そのため、ファイルからプルするときに、問題はシリアル化された配列に分離されているようです。
unserialize docsによると、問題がある場合、関数はfalseを返す必要があります。文字列の内容ではありません。
シリアル化されたデータはgetimagesizeから取得され、別の配列をシリアル化してファイルに配置すると、次のことが確認されました。
serialize(array("hi"));
出力を正常に生成できます。
Array
(
[0] => hi
)
なぜこれが起こっているのでしょうか?getimagesize 配列に関連するシリアライゼーション プロセスのバグ、またはコピー アンド ペーストによって削除されるファイル内の「隠し」文字の可能性はありますか? 何百万ものこれらのファイルが既に生成されているため、保存方法を変更することはできません。解決策は、配列をシリアル化するために独自のパーサーを作成することだけかもしれませんか? 入力は常に同じ形式なのでもっともらしいですが、これはバグまたはどこかでのエラーであることを知りたいです。