วิธีเก็บ IP ลงฐานข้อมูลแบบประหยัดพื้นที่
ปกติ เวลาที่เราสร้าง field ใน database เพื่อเก็บข้อมูล ที่เป็น ip เราจะต้องสร้าง char(15) หรือบางคนก็สร้าง varchar(15) หรือบางคน (อันนี้น่าจะเป็นคนที่มือใหม่จริงๆ) ก็สร้างเป็นชนิด text เลย ซึ่ง แต่ละกรณี ทำให้เปลืองพื้นที่มาก เอาอย่างเช่น char(15) เราก็ต้องใช้ 15 bytes ต่อการเก็บ 1 หมายเลข IP หรือ varchar ใช้ 16 bytes และ text ใช้ 17 bytes กันเลยทีเดียว นี่ยังไม่นับที่เป็น กรณี UTF-8 อีก เพราะว่าถ้าเป็น UTF-8 ก็จะใช้พื้นที่ 45, 48, 51 byte ตามลำดับ ต่อ1ip เลยทีเดียว ถือว่าเปลืองมากเพราะลองคิดดูว่าหากเป็นแสน record คงจะใช้พื้นที่ไม่น้อยเลย และจะดีกว่ามั้ย ถ้าเราลดเหลือแค่ 4 byte ต่อ 1 ip
วิธีง่ายมากแต่ต้องมีตัวช่วย ก็คือ php function ip2long($ip) และ long2ip($ip) ซึ่งจะทำหน้าที่แปลง ip ให้เป็น ตัวเลข และแปลงตัวเลขกลับมาเป็น ip โดย ฐานข้อมูลเราใช้เพียง int ชนิด unsigned ซึ่งใช้เพียง 4 byte ต่อ 1 record เท่านั้น
วิธีการก็คือ เก็บ ip ใส่ตัวแปร $ip แล้วเอาไปผ่าน
$ip = ip2long($ip);
ก็จะทำให้ $ip เป็นตัวเลขแล้ว เอาไปเก็บในฐานข้อมูลต่อไป
แล้วตอนเอากลับมาก็ใช้
$ip = long2ip($ip);
ก็จะกลับมาเป็น ip เหมือนเดิม
จริงๆไม่ใช่เรื่องใหม่หรอกครับ เค้าใช้กันมานาน ทั่วบ้านทั่วเมือง ผมก็ใช้มาพักหนึ่งแล้ว เลยเอามาแบ่งปันครับ
tag : ip2long, long2ip, เก็บ ip,ip address,ip to database ,เก็บ ip ลงฐานข้อมูล
