ฟังก์ชัน ip2long() - ใช้เก็บ IP ลงฐานข้อมูลทำให้ประหยัดพื้นที่

PHP Knowledge เป็น บอร์ดรวามความรู้ php เน้นบทความ แนวทางการเขียนโปรแกรม บันทึกกันลืม เพื่อให้สมาชิกได้เขียนความรู้ที่ตัวเองมีให้สมาชิกท่านอื่นๆ ได้ เข้ามาอ่าน และ ไว้อ่านเองกันลืมด้วย

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
Patipat
PHP Super Hero Member
PHP Super Hero Member
โพสต์: 765
ลงทะเบียนเมื่อ: 10/06/2019 10:12 am

ฟังก์ชัน ip2long() - ใช้เก็บ IP ลงฐานข้อมูลทำให้ประหยัดพื้นที่

โพสต์โดย Patipat » 15/07/2019 5:33 pm

ปกติเวลาที่เราสร้าง field ในdatabaseเพื่อเก็บข้อมูล ที่เป็นIP เราจะต้องสร้าง varchar(15) หรือบางคน ก็ใช้เป็น text สำหรับมือใหม่ ทำให้เปลืองพื้นที่มาก อย่างเช่น varchar ใช้ 16 bytes และ text ใช้ 17 bytes กันเลยทีเดียวนี่ยังรวมที่เป็น UTF-8 เพราะว่าถ้าเป็น UTF-8 ก็จะใช้ประมาณ 51 byte ต่อ 1ip เลยทีเดียว ถือว่าเปลืองมากเพราะลองคิดดูว่าหากข้อมูลมีเป็นแสน ก็คงจะใช้พื้นที่ไม่น้อยเลย และถ้าเราแปลงให้เหลือแค่ 4 byte ต่อ 1 ip ก็จะประหยัดพื้นที่ไปได้มากเลยทีเดียวครับ

วิธีคือ php function ip2long($ip) และ long2ip($ip) ซึ่งจะทำหน้าที่แปลง ip ให้เป็น ตัวเลข และแปลงตัวเลขกลับมาเป็น ip โดย ฐานข้อมูลเราใช้เพียง int ซึ่งใช้เพียง 4 byte ต่อ 1 record เท่านั้น

อันนี้จะยกตัวอย่าง ที่แปลงจาก IP ไปเป็นตัวเลขโดยใช้ฟังกัน >> $ip = ip2long($ip);

โค้ด: เลือกทั้งหมด


<?php
$ip 
= '1.37.57.181';
$ip1 = ip2long($ip);

echo "IP ที่เก็บลงฐานข้อมูลคือ > ".$ip1;

?>

ผลลัพธ์ IP ที่เก็บลงฐานข้อมูล
5555.png
5555.png (4.95 KiB) เปิดดู 167 ครั้ง



แล้วตอนเอากลับมาก็ใช้ ก็ให้ใช้ฟังก์ชัน >> $ip = long2ip($ip); ก็จะกลับมาเป็น ip เหมือนเดิม

โค้ด: เลือกทั้งหมด

<?php
$ip 
= '19216821';
$ip1 = long2ip($ip);


echo "เลขที่แปลงมาจากเลขที่เก็บในฐานข้อมูล IP ของคุณคือ > ".$ip1;

?>


ผลลัพธ์เลขที่แปลงมาจากเลขที่เก็บในฐานข้อมูล IP
6666.png
6666.png (7.18 KiB) เปิดดู 167 ครั้ง


อ้างอิง
1 http://www.codeigniter.in.th/guide/technic_php_variable
2 https://www.php.net/manual/en/function.ip2long.php
3 http://meewebfree.com/site/general-web-technic/243-optimize-database-store-ip
If you fall, let you stand. :)

ย้อนกลับไปยัง

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: 10 และ บุคคลทั่วไป 0 ท่าน