2013-10-22 16 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

老兄,你真棒! –