لماذا getenv('REMOTE_ADDR') تعطيني فارغة عنوان IP ؟
-
05-07-2019 - |
سؤال
هذا كود PHP...
207 if (getenv(HTTP_X_FORWARDED_FOR)) {
208 $ip = getenv('HTTP_X_FORWARD_FOR');
209 $host = gethostbyaddr($ip);
210 } else {
211 $ip = getenv('REMOTE_ADDR');
212 $host = gethostbyaddr($ip);
213 }
يلقي هذا التحذير...
تحذير: gethostbyaddr() [function.gethostbyaddr]:عنوان ليس في أ.ب.ج.د في شكل C:\inetpub...\filename.php على الخط 212
يبدو أن $ip فارغة.
المحلول
على php.net يقول التالية:
وظيفة
getenv
لا يعمل إذا كان الخادم الخاص بك API ASAPI (IIS).لذلك حاول أن لا تستخدمgetenv('REMOTE_ADDR')
, ولكن$_SERVER["REMOTE_ADDR"]
.
ربما أنك لم تحاول أن تفعل ذلك مع $_SERVER
?
نصائح أخرى
لماذا لا تستخدم
$_SERVER['REMOTE_ADDR']
و
$_SERVER['HTTP_X_FORWARDED_FOR']
أفضل حل قد أعطيت بالفعل.ولكن لا يزال:
getenv('HTTP_X_FORWARD_FOR');
يجب أن يكون
getenv('HTTP_X_FORWARDED_FOR');
نعم...في بعض الأحيان أجهزة الكمبيوتر تريد أن يكون سلاسل يفهمونها؛ -)
أولا وقبل كل شيء ، getenv() يأخذ سلسلة المعلمة.على خط 207, يجب استخدام:
getenv('HTTP_X_FORWARDED_FOR')
بدلا من:
getenv(HTTP_X_FORWARDED_FOR)
ثانيا: الوصول إلى هذه المتغيرات من خلال $_SERVER هو حل أكثر موثوقية ، getenv() يميل إلى عرض السلوك مختلفة على منصات مختلفة.
أيضا, هذه المتغيرات من المحتمل أن لا تعمل إذا كنت تقوم بتشغيل هذا البرنامج النصي من خلال CLI.
حاول var_dump($ip);ونرى ما متغير يحتوي على.