时常会遇到根据用户的IP获取用户所在的城市,如“欢迎来自北京的张三”。所以有了下面的程序。
<?php /* * 获取用户的IP地址 */ header("Content-Type: text/plain;charset=gb2312"); function get_online_ip($format = 0) { if (getenv ( 'HTTP_CLIENT_IP' ) && strcasecmp ( getenv ( 'HTTP_CLIENT_IP' ), 'unknown' )) { $onlineip = getenv ( 'HTTP_CLIENT_IP' ); } elseif (getenv ( 'HTTP_X_FORWARDED_FOR' ) && strcasecmp ( getenv ( 'HTTP_X_FORWARDED_FOR' ), 'unknown' )) { $onlineip = getenv ( 'HTTP_X_FORWARDED_FOR' ); } elseif (getenv ( 'REMOTE_ADDR' ) && strcasecmp ( getenv ( 'REMOTE_ADDR' ), 'unknown' )) { $onlineip = getenv ( 'REMOTE_ADDR' ); } elseif (isset ( $_SERVER ['REMOTE_ADDR'] ) && $_SERVER ['REMOTE_ADDR'] && strcasecmp ( $_SERVER ['REMOTE_ADDR'], 'unknown' )) { $onlineip = $_SERVER ['REMOTE_ADDR']; } preg_match ( "/[\d\.]{7,15}/", $onlineip, $onlineipmatches ); $onlineip = $onlineipmatches [0] ? $onlineipmatches [0] : 'unknown'; if ($format) { $ips = explode ( '.', $onlineip ); for($i = 0; $i < 3; $i ++) { $ips [$i] = intval ( $ips [$i] ); } return sprintf ( 'ddd', $ips [0], $ips [1], $ips [2] ); } else { return $onlineip; } } /** *用php的curl函数从网路上获取详细IP对应的地理未知 */ function lazdf($ip){ $url = "http://www.ip138.com/ips138.asp?ip=".$ip; $ipdz = http_request($url); preg_match("/<ul class=\"ul1\"><li>(.*?)<\/li>/i",$ipdz['body'],$jgarray); preg_match('/本站主数据:(.*)/', $jgarray[1], $place); echo "欢迎来自".$place[1]."的朋友"; } /** * CURL封装 */ function http_request($url,$post_data = array(),$header = array()) { $post_data = http_build_query($post_data); $header = $header ? $header : array ("Content-type: application/x-www-form-urlencoded; charset=gb2312"); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); curl_setopt($ch, CURLOPT_HTTPHEADER,$header); $response = curl_exec($ch); if(curl_errno($ch)) { $response = "ERROR:".curl_error($ch); } $status = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return array('body'=>$response,'status'=>$status) ; } lazdf(get_online_ip());
注意:ip138的页面格式是gb2312的,所以这里我们用的字符编码也是gb2312的,将php文件也保存成gb2312格式,浏览器的编码也要选择gb2312,否则可能会出现乱码哦!