2013-10-22 64 views
0

我用這個簡單的腳本:PHP如JavaScript:讓用戶IP

<script type="text/javascript"> 
var _mytrack = _mytrack || []; 
_mytrack.push(['_setType', 'SOMETYPE']); 
_mytrack.push(['_setEmail', '[email protected]']); 

(function() { 
var mytrack = document.createElement('script'); 
_mytrack.type = 'text/javascript'; 
_mytrack.async = true; 
mytrack.src = ('https:' == document.location.protocol ? 'https://www' : 'http://www') + '.mytrack.net/tracker.tell.php?i='+_mytrack; 
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(mytrack, s); 
})(); 
</script> 

我的PHP腳本(tracker.tell.php)看起來是這樣的:

header("content-type: application/javascript"); 
echo "alert('".$_SERVER['REMOTE_ADDR']."');"; 

現在的問題是有關$_SERVER['REMOTE_ADDR'],因爲這會給(在JS警報中)SERVER的IP而不是CLIENT的IP。

+0

由於PHP腳本在服務器上運行,而不是在客戶端上運行,可能無法使用PHP。你有沒有嘗試過/考慮過使用Javascript? – jonhopkins

+1

@jonhopkins當然,您可以從PHP獲得遠程IP ...您如何認爲Web服務器與客戶端進行通信? – Brad

+0

您可能正在服務器上運行代理服務器,是嗎? – Brad

回答

3

$ _SERVER ['REMOTE_ADDR']會爲您提供遠程用戶的IP地址。但是,如果你使用的是代理或負載平衡器,你應該使用$ _ SERVER [「HTTP_X_FORWARDED_FOR」]

如果用戶可以直接或通過代理達到你的服務器就用if語句

$remote_ip = (isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR']); 

然後將變量傳遞給JS。

+0

老兄,你真棒! –