<?
/*************************************************
* 本单元写于 :
* 作者 : 李腾秋
* E-Mail : litqqs@163.com
* 版权所有
*************************************************/
/*************************************************
作用:
各种杂七杂八的扩展函数
运用调用时不必创建misc类实例,只需misc::funcName()即可
方法原型列表:
string      misc::addSlashes(string $var)
array        misc::addSlashes(array $var)
string      misc::stripSlashes(string $var)
array       misc::stripSlashes(array $var)
float       misc::getMicrotime()
int         misc::strToTime(string $str)
string      misc::subString(string $source,int $max, $ex=”)
string      misc::getIp()
*************************************************/
if(! defined(__FILE__))
{
define(__FILE__,1);
class misc
{
//addslashes 扩展,支持数组
function addSlashes($var)
{
if(is_array($var)) return array_map(array(‘misc’,'addSlashes’), $var);
return addslashes($var);
}
//stripslashes 扩展,支持数组
function stripSlashes($var)
{
if(is_array($var)) return array_map(array(‘misc’,'stripSlashes’), $var);
return stripslashes($var);
}
//getMicrotime 当前 UNIX 时间
function getMicrotime()
{
list($ns,$s) = explode(‘ ‘,  microtime());
return ((float)$ns) + ((float)$s);
}
//strToTime 取格式为’2000-05-03 08:12:12′字串的 UNIX 时间戳
function strToTime($str)
{
list($ymd,$his)= explode(‘ ‘, $str);
list($y,$m,$d)=explode(‘-’, $ymd);
list($h,$i,$s)=explode(‘:’, $his);
return mktime($h,$i,$s,$m,$d,$y);
}
/**string subString($source,$max, $ex=”)
* 取$source的前$max个字节子串,同时处理最后一个双字节,此方法不支持UTF8
* @return 子字串
**/
function subString($source,$max, $ex=”) {
if (strlen($source) <= $max) return $source;
$ret = $source;
$_len = $max – strlen($ex);
$mb = ord($source[$_len]) > 0x7f;
if($mb){
for($i=$_len-1; $i>=0; $i–){
if(ord($source[$i]) > 0x7f){
$mb = !$mb;
}else{
if(!$mb)$_len–;
break;
}
}
}
if($i<0 && !$mb) $_len–;
$ret  = substr($source, 0, $_len);
return $ret . $ex;
}
//此方法摘自 PhpMyAdmin,仅作小量修改
function getIp() {
static $REMOTE_ADDR;
static $HTTP_X_FORWARDED_FOR, $HTTP_X_FORWARDED, $HTTP_FORWARDED_FOR, $HTTP_FORWARDED;
static $HTTP_VIA, $HTTP_X_COMING_FROM, $HTTP_COMING_FROM;

// Get some server/environment variables values
if (empty($REMOTE_ADDR)) {
if (!empty($_SERVER) && isset($_SERVER['REMOTE_ADDR'])) {
$REMOTE_ADDR = $_SERVER['REMOTE_ADDR'];
}
else if (!empty($_ENV) && isset($_ENV['REMOTE_ADDR'])) {
$REMOTE_ADDR = $_ENV['REMOTE_ADDR'];
}
else if (@getenv(‘REMOTE_ADDR’)) {
$REMOTE_ADDR = getenv(‘REMOTE_ADDR’);
}
} // end if
if (empty($HTTP_X_FORWARDED_FOR)) {
if (!empty($_SERVER) && isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$HTTP_X_FORWARDED_FOR = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
else if (!empty($_ENV) && isset($_ENV['HTTP_X_FORWARDED_FOR'])) {
$HTTP_X_FORWARDED_FOR = $_ENV['HTTP_X_FORWARDED_FOR'];
}
else if (@getenv(‘HTTP_X_FORWARDED_FOR’)) {
$HTTP_X_FORWARDED_FOR = getenv(‘HTTP_X_FORWARDED_FOR’);
}
} // end if
if (empty($HTTP_X_FORWARDED)) {
if (!empty($_SERVER) && isset($_SERVER['HTTP_X_FORWARDED'])) {
$HTTP_X_FORWARDED = $_SERVER['HTTP_X_FORWARDED'];
}
else if (!empty($_ENV) && isset($_ENV['HTTP_X_FORWARDED'])) {
$HTTP_X_FORWARDED = $_ENV['HTTP_X_FORWARDED'];
}
else if (@getenv(‘HTTP_X_FORWARDED’)) {
$HTTP_X_FORWARDED = getenv(‘HTTP_X_FORWARDED’);
}
} // end if
if (empty($HTTP_FORWARDED_FOR)) {
if (!empty($_SERVER) && isset($_SERVER['HTTP_FORWARDED_FOR'])) {
$HTTP_FORWARDED_FOR = $_SERVER['HTTP_FORWARDED_FOR'];
}
else if (!empty($_ENV) && isset($_ENV['HTTP_FORWARDED_FOR'])) {
$HTTP_FORWARDED_FOR = $_ENV['HTTP_FORWARDED_FOR'];
}
else if (@getenv(‘HTTP_FORWARDED_FOR’)) {
$HTTP_FORWARDED_FOR = getenv(‘HTTP_FORWARDED_FOR’);
}
} // end if
if (empty($HTTP_FORWARDED)) {
if (!empty($_SERVER) && isset($_SERVER['HTTP_FORWARDED'])) {
$HTTP_FORWARDED = $_SERVER['HTTP_FORWARDED'];
}
else if (!empty($_ENV) && isset($_ENV['HTTP_FORWARDED'])) {
$HTTP_FORWARDED = $_ENV['HTTP_FORWARDED'];
}
else if (@getenv(‘HTTP_FORWARDED’)) {
$HTTP_FORWARDED = getenv(‘HTTP_FORWARDED’);
}
} // end if
if (empty($HTTP_VIA)) {
if (!empty($_SERVER) && isset($_SERVER['HTTP_VIA'])) {
$HTTP_VIA = $_SERVER['HTTP_VIA'];
}
else if (!empty($_ENV) && isset($_ENV['HTTP_VIA'])) {
$HTTP_VIA = $_ENV['HTTP_VIA'];
}
else if (@getenv(‘HTTP_VIA’)) {
$HTTP_VIA = getenv(‘HTTP_VIA’);
}
} // end if
if (empty($HTTP_X_COMING_FROM)) {
if (!empty($_SERVER) && isset($_SERVER['HTTP_X_COMING_FROM'])) {
$HTTP_X_COMING_FROM = $_SERVER['HTTP_X_COMING_FROM'];
}
else if (!empty($_ENV) && isset($_ENV['HTTP_X_COMING_FROM'])) {
$HTTP_X_COMING_FROM = $_ENV['HTTP_X_COMING_FROM'];
}
else if (@getenv(‘HTTP_X_COMING_FROM’)) {
$HTTP_X_COMING_FROM = getenv(‘HTTP_X_COMING_FROM’);
}
} // end if
if (empty($HTTP_COMING_FROM)) {
if (!empty($_SERVER) && isset($_SERVER['HTTP_COMING_FROM'])) {
$HTTP_COMING_FROM = $_SERVER['HTTP_COMING_FROM'];
}
else if (!empty($_ENV) && isset($_ENV['HTTP_COMING_FROM'])) {
$HTTP_COMING_FROM = $_ENV['HTTP_COMING_FROM'];
}
else if (@getenv(‘HTTP_COMING_FROM’)) {
$HTTP_COMING_FROM = getenv(‘HTTP_COMING_FROM’);
}
} // end if

// Gets the default ip sent by the user
if (!empty($REMOTE_ADDR)) {
$direct_ip = $REMOTE_ADDR;
}

// Gets the proxy ip sent by the user
$proxy_ip     = ”;
if (!empty($HTTP_X_FORWARDED_FOR)) {
$proxy_ip = $HTTP_X_FORWARDED_FOR;
} else if (!empty($HTTP_X_FORWARDED)) {
$proxy_ip = $HTTP_X_FORWARDED;
} else if (!empty($HTTP_FORWARDED_FOR)) {
$proxy_ip = $HTTP_FORWARDED_FOR;
} else if (!empty($HTTP_FORWARDED)) {
$proxy_ip = $HTTP_FORWARDED;
} else if (!empty($HTTP_VIA)) {
$proxy_ip = $HTTP_VIA;
} else if (!empty($HTTP_X_COMING_FROM)) {
$proxy_ip = $HTTP_X_COMING_FROM;
} else if (!empty($HTTP_COMING_FROM)) {
$proxy_ip = $HTTP_COMING_FROM;
} // end if… else if…

// Returns the true IP if it has been found, else FALSE
if (empty($proxy_ip)) {
// True IP without proxy
return $direct_ip;
} else {
$is_ip = preg_match(‘|^([0-9]{1,3}\.){3,3}[0-9]{1,3}|’, $proxy_ip, $regs);
if ($is_ip && (count($regs) > 0)) {
// True IP behind a proxy
return $regs[0];
} else {
// Can’t define IP: there is a proxy but we don’t have
// information about the true IP
return FALSE;
}
} // end if… else…
} // end of the ‘get_Ip()’ function

}//end class
}//end if

?>

转载请标注编辑来源:PHP代码收藏(获取IP地址部分代码不错)

我想网 板凳 编辑

Tags:

分享
QQ书签
百度搜藏
Del.icio.us
Google书签
和讯网摘
天极网摘

回复已关闭.