لماذا getenv('REMOTE_ADDR') تعطيني فارغة عنوان IP ؟

StackOverflow https://stackoverflow.com/questions/174393

  •  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);ونرى ما متغير يحتوي على.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top