วิธีแก้ปัญหา serialize กับ unserialize ที่อยากแนะนำ by

23
Feb
1

บางครั้งที่เราใช้ function serialize ใน php เพื่อแปลงข้อมูลเป็น text ไปแล้ว แต่เมื่อจะ แปลงกลับด้วย unserialize กลับเจอ error ประมาณนี้ unserialize() [function.unserialize]: Error at offset 297 of 300 bytes โดยตัวเลขอาจจะไม่เหมือนกัน แต่ว่าโดยเนื้อหาก็เหมือนกันนั่นล่ะ
หลังจากที่หาข้อมูลอยู่นาน ก็พบได้ว่า ปัญหาที่แท้จริงแล้วก็คือ format ของ text ที่จะเอามาแปลงกลับโดยใช้ unserialize ไม่ถูกต้อง
หากเราเคยทดสอบ หรือสังเกตุจะเห็นว่า text ที่เราได้จากการแปลงโดยใช้ serialize นั้น จะมีรูปแบบที่ตายตัวครับ นั่นเป็นสาเหตุที่ว่าทำไมจึงไม่ปลอดภัยเมื่อเราเก็บข้อมูลในรูปแบบ serialize ธรรมดา และด้วยความที่เป็นรูปแบบตายตัว ดังนั้น หากมีการเปลี่ยนแปลงที่ string เพียงแค่จุดเดียวเท่านั้นก็จะทำให้เราไม่สามารถแปลงกลับโดยใช้ unserialize ได้ทันที สำหรับวิธีแก้ปัญหาที่ดีที่สุด สำหรับปัญหา unserialize() [function.unserialize]: Error at offset 297 of 300 bytes ก็คือการตรวจสอบ string โดยอาจจะทำการ echo , print_r หรืออะไรก็ได้ เพื่อหาว่าข้อมูลหรือตัวหนังสือไหน แปลก หรือเพี้ยน หรือว่ามีอะไรขาด หรือเกินจากค่าที่ควรจะเป็นหรือเปล่า
ตัวอย่างเท่าที่เคยเจอมา ก็จะมีแบบว่า จากเครื่องหมาย ” ก็เพิ่มมาเป็น \” (ถูกเติมเข้ามาในกระบวนการบันทึกลงฐานข้อมูล) หรือว่า text ที่จะเอามาแปลงนั้นไม่ครบ คือขาดไปตัวเดียวก็มี error แล้ว เป็นต้น
ดังนั้น วิธีการที่ดีที่สุดก็คือ ลองทดสอบว่า serialize แล้วดูว่าได้ค่าอะไร จากนั้น ลองเอาไปเปรียบเทียบกับค่า ที่ error ว่าหน้าตาเหมือนหรือว่าต่างกันตรงไหนอย่างไร ทำไมจึง error เท่านี้ล่ะครับ แก้ bug ได้แน่นอน

Enjoy this article?

Consider subscribing to our RSS feed!

1 ความเห็น

  1. EThaiZone
    09:33 on May 13th, 2012

    เข้า Base64 หลัง serialize ทันทีก่อนจะเก็บข้อมูล จะลดปัญหาตรงนี้ได้ระดับหนึ่งครับ

ใส่ความเห็น

RSS feed for comments on this post

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน