ปัญหา unserialize() [function.unserialize]: Error at offset

ปัญหา unserialize() [function.unserialize]: Error at offset

บางครั้งที่เราใช้ 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 ได้แน่นอน

Create: Modify : 2011-03-22 23:23:06 Read : 5669 URL :