2008-10-06 102 views
0

這個PHP代碼...爲什麼getenv('REMOTE_ADDR')給我一個空白的IP地址?

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]:地址是 不是在ABCD形式C:\ inetpub ... \ filename.php on line

看來$ ip是空白。

回答

11

它說以下內容:

功能getenv如果你的服務器API不起作用是ASAPI(IIS)。 因此,儘量不要使用getenv('REMOTE_ADDR'),而是使用$_SERVER["REMOTE_ADDR"]

你也許試着去做$_SERVER

4

你爲什麼不上php.net使用

$_SERVER['REMOTE_ADDR'] 

$_SERVER['HTTP_X_FORWARDED_FOR'] 
1

首先,GETENV()以一個字符串作爲參數。上線207,你應該使用:

getenv('HTTP_X_FORWARDED_FOR') 

...而不是:

getenv(HTTP_X_FORWARDED_FOR) 

其次,通過$ _ SERVER訪問這些變量是一個更可靠的解決方案,爲getenv()往往顯示不同在不同平臺上的行爲。

而且,這些變量可能不會,如果你是通過CLI運行此腳本工作。

嘗試的var_dump($ IP);並查看變量包含的內容。

2

已經給出了一個更好的解決方案。但還是:

getenv('HTTP_X_FORWARD_FOR'); 

應該

getenv('HTTP_X_FORWARDED_FOR'); 

是啊...有時電腦想擁有他們瞭解;-)

相關問題