• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کاربرد و مصرف ip2long() چیست؟
#1
سلام،

من امروز با تابع ip2long() اشنا شدم و برای اولین بار بود که نتونستم با جستجو به نتیجه مطلوب برسم!

برای همین از شما میپرسم. من میدونم این تابع چیکار میکنه ولی هرچی فکر میکنم نمیدونم به چه دردی میخوره. میشه کسی که میدونه توضیح بده. ممنونم Heart
غایب
  پاسخ
تشکر شده توسط :
#2
سلام

این تابع ip رو به یه کمیت عددی تبدیل میکنه که خاصیت همون ای پی رو داره

شما فرض بگیر میخوای ای پی یه کشور خارجی رو به سایتت محدود کنی و میدونی که رنج ای پی شون اینه 200.200.0.0 تا 200.200.255.255
اگه بخوای اینارو دونه دونه explode کنه و بعد شرط بزاری,خیلی سخت میشه, ولی به جاش شما میتونی از دو تابع ip2long و long2ip استفاده کنی .
نحوه کارم اینه که دو ای پی بالارو تبدیل به عدد میکنی و هر کی که به سایت بیاد ای پی اونم به عدد تبدیل میکنی
اگه عدد ای پی کاربر بین این دو عدد باشه معلوم میشه که کاربر از اون کشوره و براش 404 نشون میدی
  پاسخ
تشکر شده توسط : cyletech admin M.J vejmad
#3
الان آیپی 200.200.255.255 رو بخوای به همین صورت ذخیره کنی چقدر فضا اشغال میکنه؟ اگر بصورت رشته ای ذخیره کنی میشه 15 بایت.
ولی همین IPv4 به عدد که تبدیل بشه میشه 4 بایت.
بنابراین خیلی جاها از فرم عددی برای ذخیره در دیتابیس استفاده میشه. اینطوری تعداد خیلی بیشتری IP رو میتونی در یک فضای محدود ذخیره کنی.

اما فرم عددی کاربردهای دیگر هم زیاد داره. در بیشتر پروتکل ها بخصوص اونایی که سطح پایین تر از متن ساده کار میکنن، از فرم عددی استفاده میشه.
همینطور برای پردازشهای داخلی برنامه ها هم استفاده از فرم عددی خیلی رایج هست. طبیعتا پردازش در فرم عددی در خیلی کاربردهای پایه پرفورمنس بیشتری داره و احتمالا کد کمتر/ساده تری هم میخواد.

اصلا شما چون IP رو به این شکل دیدی تاحالا فکر میکنی IP اصلش به این شکله و بعد ما میایم و به شکل عددی تبدیلش میکنیم، درحالیکه بنده خیلی شک دارم نسبت به این موضوع و فکر میکنم اصل IP همون عددیش بوده از اول و صرفا در محیطهای سطح بالا و برای استفادهء انسان و مواردی مثل خوانایی در جاهایی که لازمه (منجمله لاگ ها) از این فرم رشته ای استفاده شده.
IP از اولش یک عدد تعریف شده. منتها بیت های مختلف اون عدد رو دسته بندی کردن برای کارهای مختلف و یجورایی شده 4 عدد یک بایتی.

خلاصه IP همونقدر که فرم رشته ای داره عدد هم هست و درواقع اگر از کاربردهای درگیر با انسان و ساختمان داده ها و پروتکل های کاملا سطح بالا صرفنظر کنیم، در بقیهء موارد از فرم عددی/باینری خیلی بیشتر استفاده میشه.

راستی من برای ذخیرهء IP در دیتابیس از varbinary(16) استفاده کردم، چون IPv6 رو هم باید بحساب آورد که حجم ذخیره سازی بیشتری داره. ضمنا برای تبدیل فرم رشته ای به عدد/باینری هم از تابع inet_pton استفاده کردم، چون ip2long فقط برای IPv4 هست.
  پاسخ
تشکر شده توسط : admin cyletech M.J ali786
#4
به نظرم بهتره با تابع :
explod
خودمون تبدیلش کنیم به عدد !!!
اینطوری بهتره.
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان