ذخیره آرایه در دیتابیس و ارسال اطلاعات در php با serialize

0

تابع serialize در php برای تبدیل یک شیء یا یک آرایه به یک رشته متنی کاربرد دارد. از serialization برای نگهداری ذخیره و نگهداری اطلاعات در فایل و یا دیتابیس استفاده میشه چون به هیچ عنوان نمیشه یک array رو در دیتابیس ذخیره سازی کرد و اکثر اطلاعات هم به صورت آرایه در وبسایت مورد استفاده قرار میگیره.

[php]

$serialized_data = serialize(array(‘Math’, ‘Language’, ‘Science’));
echo $serialized_data;

[/php]

که مقدار خروجی کد فوق به صورت زیر هست که درواقع یک رشته متنی و قابل ذخیره سازی در دیتابیس و یا نمایش برای استفاده در سیستم API هست

[php]

a:3:{i:0;s:4:"Math";i:1;s:8:"Language";i:2;s:7:"Science";}

[/php]

برای برگردوندن اطلاعات به حالت اول میتونیم از تابع unserialize استفاده کنیم.

[php]

$unserialized_data = unserialize(‘a:3:{i:0;s:4:"Math";i:1;s:8:"Language";i:2;s:7:"Science";}’);
echo $unserialized_data;

[/php]

که مقدار خروجی کد فوق برابر با آرایه ای می باشد که قصد ذخیره سازی آن را داشته ایم

[php]

array(‘Math’, ‘Language’, ‘Science’)

[/php]

 

از این روش می توان برای نمایش اطلاعات بر روی صفحه نمایش و خواندن اطلاعات از یک هاست و حتی سرویس دیگر استفاده نمود. بدین صورت که میتوان با متد GET در آدرس اطلاعات مورد نظر را به سرویس دهنده اول ارسال نمود و خروجی را به صورت سریالایز شده خروجی گرفته و در سرویس دهنده دوم فراخوانی نماییم. در این مورد میتوانید به تابع wp_remote_get مراجعه نمایید که خودم به شخصه در چندنی و چند سرویس از این توابع استفاده کرده ام.

برای ارسا اطلاعات بین دو سرویس دهنده میتوانید از متدهای json نیز استفاده نمایید. توجه نمایید که کاربرد تابع serialize کاملا با تابع impold متفاوت است و نمیتوان از هیچ کدام به جای دیگری استفاده نمود.

گاهی اوقات خروجی تابع unserialize مقدار false می باشد

در یکی از پروژه های خودم (سیستم نمایش کدتخفیف) با مشکل نمایش false در خروجی تابع unserialize مواجه شدم و راه حل زیر رو تونستم پیدا کنم. در راه حل زیر ابتدا اطلاعات کد میشوند و سپس در طرف دیگر دیکد شده و نمایش داده می شود. در این حالت تمامی اطلاعات به درستی منتقل می شوند و حتی برای حروف فارسی نیز هیچ مشکلی رخ نخواهد داد.

[php]

$txt = base64_encode(serialize($txt));

$txt = unserialize(base64_decode($txt));

[/php]

در مثال فوق در خط اول اطلاعات را به صورت کد شده آمده ارسال و یا ذخیره سازی نموده ایم و در خط دوم اطلاعات کد شده رو ابتدا از حالت کد شده خارج کرده و سپس از حالت سریالایز شده خارج می نماییم.

 

منبع : stackoverflow

 

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.