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

ตอบกระทู้

รูปแสดงอารมณ์
:icon_plusone: :like: :plusone: :gfb: :-D :) :( :-o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :angry: :baa: :biggrin:
รูปแสดงอารมณ์อื่นๆ

BBCode เปิด
[img] เปิด
[url] เปิด
[Smile icon] เปิด

กระทู้แนะนำ
   

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

ฟังก์ชัน 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) Viewed 430 times

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

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

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


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

?>
ผลลัพธ์เลขที่แปลงมาจากเลขที่เก็บในฐานข้อมูล IP
6666.png
6666.png (7.18 KiB) Viewed 430 times
อ้างอิง
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

ข้างบน