Mahmoud Alrashidi نشر 21 مارس 2021 أرسل تقرير نشر 21 مارس 2021 أحاول الحصول على عنوان IP الخاص بالعميل في Laravel، من السهل الحصول على عنوان IP الخاص بالعميل في PHP باستخدام: $_SERVER["REMOTE_ADDR"] إنها تعمل بشكل جيد فيPlain PHP ، ولكن عندما أستخدم نفس الشيء في Laravel ، فإنها تُرجع عنوان IP للخادم بدلاً من IP الخاص بالزائر. هل هناك طريقة أخرى للحصول عليها في Laravel ؟ اقتباس
0 Sam Ahw نشر 21 مارس 2021 أرسل تقرير نشر 21 مارس 2021 لارافيل تقدّم إمكانية الحصول على عنوان IP من خلال ال request القادم من العميل إلى الخادم، ويمكن تنفيذ ذلك باتباع عدة طرق: $clientIP = request()->ip(); dd($clientIP); أو من خلال الغرض request بشكل مباشر ضمن المتحكّم: public function index(Request $request) { dd($request->ip()); } وأيضاً يمكنك استعادة القيمة من \Request::ip() وتخزينها في متحوّل: $clientIP = \Request::ip(); dd($clientIP); أو $clientIP = \Request::getClientIp(true); dd($clientIP); 1 اقتباس
0 Waleed Alfakiat نشر 21 مارس 2021 أرسل تقرير نشر 21 مارس 2021 يمكنك الحصول على عنوان IP عن طريق $request->ip(); بعد أن تقوم بتعريف الـ request في الـ Controller الذي يحتاج عنوان IP كالتالي: public function GetAll(Request $request){ echo $request->ip(); } 1 اقتباس
0 Abdulhamid Alhazzouri نشر منذ 21 ساعة أرسل تقرير نشر منذ 21 ساعة بتاريخ On 21/3/2021 at 22:09 قال Sam Ahw: لارافيل تقدّم إمكانية الحصول على عنوان IP من خلال ال request القادم من العميل إلى الخادم، ويمكن تنفيذ ذلك باتباع عدة طرق: $clientIP = request()->ip(); dd($clientIP); أو من خلال الغرض request بشكل مباشر ضمن المتحكّم: public function index(Request $request) { dd($request->ip()); } وأيضاً يمكنك استعادة القيمة من \Request::ip() وتخزينها في متحوّل: $clientIP = \Request::ip(); dd($clientIP); أو $clientIP = \Request::getClientIp(true); dd($clientIP); $user->tokens()->delete(); $token = $user->createToken('api-token')->plainTextToken; $user->last_login_at = now(); $user->last_login_ip = $request->ip(); $user->save(); return response()->json([ 'message' => 'تم تسجيل الدخول بنجاح', 'user' => $user, 'token' => $token ], 200); هذا الجزء المسؤول عن تخزين IP وكذلك الامر هو يجلب IP المحلي او الخاص بسيرفر وليس IP المستخدم ذاته هل ذلك بسبب ان اللمختبر محلي وليس مرفوعاً على موقع الكتروني حقيقي ؟ اقتباس
0 Mustafa Suleiman نشر منذ 21 ساعة أرسل تقرير نشر منذ 21 ساعة بتاريخ 19 دقائق مضت قال Abdulhamid Alhazzouri: $user->tokens()->delete(); $token = $user->createToken('api-token')->plainTextToken; $user->last_login_at = now(); $user->last_login_ip = $request->ip(); $user->save(); return response()->json([ 'message' => 'تم تسجيل الدخول بنجاح', 'user' => $user, 'token' => $token ], 200); هذا الجزء المسؤول عن تخزين IP وكذلك الامر هو يجلب IP المحلي او الخاص بسيرفر وليس IP المستخدم ذاته هل ذلك بسبب ان اللمختبر محلي وليس مرفوعاً على موقع الكتروني حقيقي ؟ بالفعل، بتشغيل خادم لارافل أو apache على جهازك وتُرسل الطلب من نفس الجهاز عبر Postman إلى الرابط 127.0.0.1:8000، فالعميل وهو Postman والخادم وهو Laravel موجودان على نفس الجهاز. عنوان 127.0.0.1 هو عنوان الـ Loopback Address أي جهازك يكلم نفسه، لذلك كود لارافيل $request->ip() يعمل بشكل سليم ويجلب IP الجهاز الذي أرسل الطلب، وهو جهازك أنت. عند رفع المشروع على استضافة أو سيرفر حقيقي، ويقوم مستخدم من هاتفه أو كمبيوتره بتسجيل الدخول، دالة $request->ip() ستجلب عنوان الـ IP العام Public IP الفعلي للمستخدم مثل 197.38.x.x أو IPv6. وللعلم لو استخدمت Cloudflare أو Reverse Proxy مثل Nginx أو Load Balancer أمام السيرفر ستلاحظ تلاحظ أن لارافيل أصبح يُسجل IP خوادم Cloudflare أو 127.0.0.1 بدلاً من المستخدم، هنا يجب إعداد الـ Trusted Proxies في لارافيل عبر ملف TrustProxies.php أو في bootstrap/app.php في لارافيل 11 ليقرأ لارافيل الترويسة X-Forwarded-For أو CF-Connecting-IP. اقتباس
0 محمد عاطف25 نشر منذ 20 ساعة أرسل تقرير نشر منذ 20 ساعة بتاريخ منذ ساعة مضت قال Abdulhamid Alhazzouri: $user->tokens()->delete(); $token = $user->createToken('api-token')->plainTextToken; $user->last_login_at = now(); $user->last_login_ip = $request->ip(); $user->save(); return response()->json([ 'message' => 'تم تسجيل الدخول بنجاح', 'user' => $user, 'token' => $token ], 200); هذا الجزء المسؤول عن تخزين IP وكذلك الامر هو يجلب IP المحلي او الخاص بسيرفر وليس IP المستخدم ذاته هل ذلك بسبب ان اللمختبر محلي وليس مرفوعاً على موقع الكتروني حقيقي ؟ نعم بالفعل هذا بسبب أنك تستخدم جهاز محلي لديك ولهذا يظهر لك ال ip المحلي وهو 127.0.0.1 وهذا بسب : أن المرسل والمستقبل على نفس الجهاز: لأنك تقوم بإرسال الطلب من المتصفح إلى السيرفر (تطبيق لارافيل) وكلاهما متواجدان فعليا على نفس الجهاز. شبكة ال Loopback (الحلقة المغلقة): عندما تفتح الرابط http://localhost، فإن الطلب لا يخرج من جهازك إلى الراوتر إطلاقا بل يدور داخل الشبكة الداخلية الخاصة بنظام التشغيل وستجد انك تستطيع الوصول للمشروع حتى لو ليس لديك إنترنت. ولذلك يرى لارافيل أن مصدر الطلب هو هذا الجهاز نفسه وعنوانه الدائم هو 127.0.0.1. فال IP العام (Public IP) أو المحلي (Local IP) مثل 192.168.1.x الخاص بك لا يتم استخدامه إلا عندما يتواصل جهازك مع شبكة خارجية أو أجهزة أخرى على نفس الشبكة. وهذا الأمر سيختلف عند الرفع على سيرفر خارجى. اقتباس
السؤال
Mahmoud Alrashidi
أحاول الحصول على عنوان IP الخاص بالعميل في Laravel، من السهل الحصول على عنوان IP الخاص بالعميل في PHP باستخدام:
إنها تعمل بشكل جيد فيPlain PHP ، ولكن عندما أستخدم نفس الشيء في Laravel ، فإنها تُرجع عنوان IP للخادم بدلاً من IP الخاص بالزائر.
هل هناك طريقة أخرى للحصول عليها في Laravel ؟
5 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.