Further complicating the debate about getting someone's ip, I should note that getenv() doesn't exist in ISAPI mode. However, the $_SERVER array exists even in ISAPI mode if PHP is 4.1.0 or over. So, in order to accomodate ISAPI mode, you can get IPs like this:function getip() { if ($_SERVER) { if ( $_SERVER[HTTP_X_FORWARDED_FOR] ) { $realip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } elseif ( $_SERVER["HTTP_CLIENT_ip"] ) { $realip = $_SERVER["HTTP_CLIENT_ip"]; } else { $realip = $_SERVER["REMOTE_ADDR"]; }} else { if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) { $realip = getenv( 'HTTP_X_FORWARDED_FOR' ); } elseif ( getenv( 'HTTP_CLIENT_ip' ) ) { $realip = getenv( 'HTTP_CLIENT_ip' ); } else { $realip = getenv( 'REMOTE_ADDR' ); } } return $realip; }If you're running ISAPI mode below PHP 4.1.0, you'd have to modify this to use the array $HTTP_SERVER_VARS, but those cases will be few indeed. nielsvanhove dot N dot O dot S dot P dot A dot M at hotmail dot com 16-Apr-2002 07:22 Some improvements of the script from above: function getip() { if (isSet($_SERVER)) { if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) { $realip = $_SERVER["HTTP_X_FORWARDED_FOR"]; } elseif (isSet($_SERVER["HTTP_CLIENT_ip"])) { $realip = $_SERVER["HTTP_CLIENT_ip"]; } else { $realip = $_SERVER["REMOTE_ADDR"]; }} else { if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) { $realip = getenv( 'HTTP_X_FORWARDED_FOR' ); } elseif ( getenv( 'HTTP_CLIENT_ip' ) ) { $realip = getenv( 'HTTP_CLIENT_ip' ); } else { $realip = getenv( 'REMOTE_ADDR' ); } } return $realip; }
$ip=$_SERVER[REMOTE_ADDR];
echo $ip;
?>
if ($_SERVER) {
if ( $_SERVER[HTTP_X_FORWARDED_FOR] ) {
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif ( $_SERVER["HTTP_CLIENT_ip"] ) {
$realip = $_SERVER["HTTP_CLIENT_ip"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}} else {
if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
$realip = getenv( 'HTTP_X_FORWARDED_FOR' );
} elseif ( getenv( 'HTTP_CLIENT_ip' ) ) {
$realip = getenv( 'HTTP_CLIENT_ip' );
} else {
$realip = getenv( 'REMOTE_ADDR' );
}
}
return $realip;
}If you're running ISAPI mode below PHP 4.1.0, you'd have to modify this to use the array $HTTP_SERVER_VARS, but those cases will be few indeed.
nielsvanhove dot N dot O dot S dot P dot A dot M at hotmail dot com
16-Apr-2002 07:22 Some improvements of the script from above:
function getip() {
if (isSet($_SERVER)) {
if (isSet($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} elseif (isSet($_SERVER["HTTP_CLIENT_ip"])) {
$realip = $_SERVER["HTTP_CLIENT_ip"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}} else {
if ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
$realip = getenv( 'HTTP_X_FORWARDED_FOR' );
} elseif ( getenv( 'HTTP_CLIENT_ip' ) ) {
$realip = getenv( 'HTTP_CLIENT_ip' );
} else {
$realip = getenv( 'REMOTE_ADDR' );
}
}
return $realip;
}
$sMac = "";
$ip= getenv("REMOTE_ADDR");
$ip1 = getenv("HTTP_X_FORWARDED_FOR");
$ip2 = getenv("HTTP_CLIENT_IP");
($ip1) ? $ip = $ip1 : null;
($ip2) ? $ip = $ip2 : null;
if ($AiType > 1)
{
$sCmd = "arp $ip";
echo $sCmd;
$sString = shell_exec($sCmd);
for($iCount=0;$iCount<10;$iCount++)
$sString=str_replace(" "," ",$sString);
$aTemp = split(" ",$sString);
$sMac = trim($aTemp[count($aTemp)-3]);
}
switch($AiType)
{
case 0:
$sResult = "";
break;
case 1:
$sResult = $ip;
break;
case 2:
$sResult = $sMac;
break;
case 3:
$sResult = $ip . " " . $sMac;
break;
default:
$sResult = "";
break;
}
return $sResult;
}在linux上执行的得到IP和mac的函数
$sMac = "";
$ip= getenv("REMOTE_ADDR");
$ip1 = getenv("HTTP_X_FORWARDED_FOR");
$ip2 = getenv("HTTP_CLIENT_IP");
($ip1) ? $ip = $ip1 : null;
($ip2) ? $ip = $ip2 : null;
if ($AiType > 1)
{
$sCmd = "arp $ip";
echo $sCmd;
$sString = shell_exec($sCmd);
for($iCount=0;$iCount<10;$iCount++)
$sString=str_replace(" "," ",$sString);
$aTemp = split(" ",$sString);
$sMac = trim($aTemp[count($aTemp)-3]);
}
switch($AiType)
{
case 0:
$sResult = "";
break;
case 1:
$sResult = $ip;
break;
case 2:
$sResult = $sMac;
break;
case 3:
$sResult = $ip . " " . $sMac;
break;
default:
$sResult = "";
break;
}
return $sResult;
}在linux上执行的得到IP和mac的函数