本文以美女时钟的制作为例子,介绍如何使用PHP获取访客IP,并利用Snoopy.php抓取IP对应的国家代码,然后通过Mysql数据库select获取IP对应的时区代码,直到最后获取访客的当前时间。

演示页面:http://www.shuilog.com/pic.php

完整的代码请见美女时钟制作教程那篇文章。

PHP获取访客IP

使用PHP获取访客IP很简单,只需要下面这段代码:

<?php $iipp=$_SERVER["REMOTE_ADDR"]; ?>

利用Snoopy.php抓取IP对应的国家代码

Snoopy是一个PHP类,使用Snoopy可以很方便的采集、抓取网页内容。

比如,抓取我的博客内容:

<?php
include “Snoopy.class.php”;
$snoopy = new Snoopy;
$snoopy->fetchtext(“http://www.shuilog.com”);
echo $shuilog=$snoopy->results;
?>

所以,我们只需要找一个在线IP-国家查询网站,然后使用Snoopy来抓取之前获取的访客IP对应的国家信息就可以啦。当然如果可以直接在线查询IP对应的时区就更好了,可惜我只找到了一个每天只能在线查询IP-时区20次的网站,显然是不能使用的了。所以,最后我使用的是blogama (http://blogama.org)来抓取IP对应的国家代码:

<?php
include "snoopy.php"$snoopy = new Snoopy$snoopy->fetchtext("http://blogama.org/ip_query.php?ip=$iipp&output=xml"); 
$ip2country=$snoopy->results$country=substr("$ip2country",strpos($ip2country,"OK")+3,2); 
?>
上面的代码中用到了substr()和strpos()两个PHP函数。

substr()函数用来提取字符串中的一段字符串。

下面是PHP中文手册中对substr()函数的介绍:

  • 语法: string substr(string string, int start, int [length]);
  • 返回值: 字符串函数
  • 函数说明:本函数将字符串 string 的第 start 位起的字符串取出 length 个字符。若 start 为负数,则从字符串尾端算起。若可省略的参数 length 存在,但为负数,则表示取到倒数第 length 个字符。
  • 使用范例:

<?
echo substr(“abcdef”, 1, 3); // 返回 “bcd”
echo substr(“abcdef”, -2); // 返回 “ef”
echo substr(“abcdef”, -3, 1); // 返回 “d”
echo substr(“abcdef”, 1, -1); // 返回 “bcde”
?>

strpos()函数用来查找某段字符串首次出现的位置。

下面是PHP中文手册中对strpos()函数的介绍:

  • 语法:strpos(string string, string find,int start(可选))
  • 返回值:int型
  • 使用范例:

[code=php]<?php echo strpos("Hello world!","wo");//返回 6 ?>[/code]

通过Mysql数据库select获取IP对应的时区代码

我们还需要在PHPMyAdmin自建一个国家代码-时区的数据库。然后连接数据库,通过MySql的select语句获取IP对应的国家代码对应的时区代码,最后获取访客当前时间。

数据表country2timezone大致是这样的:

	              country	  timezone
			CN	Asia/Shanghai
			FR	Europe/Paris
			US	America/New_York
			AU	Australia/Sydney
			GB	Europe/London
			KR	Asia/Seoul
			JP	Asia/Tokyo

连接数据库,通过MySql的select语句获取IP对应的国家代码对应的时区代码:

<?php
$mysql_server_name=“localhost”;
$mysql_username=“shuil_user”;//具有select权限的数据库user
$mysql_password=“)=mfNgUY&y,K”;
$mysql_database=“shuil_b”;
$conn=mysql_connect($mysql_server_name, $mysql_username, $mysql_password);
$sql=“SELECT timezone FROM `country2timezone` WHERE country=’$country‘”;//select语句
$timezone=mysql_db_query($mysql_database, $sql, $conn);
$row=mysql_fetch_row($timezone);
date_default_timezone_set($row[0]);
echo $nowtime=date(“H:i”);//获取并显示访客当前时间
?>

人家还要...

沙发寂寞中...

  1. Avatar

    [...] 使用PHP函数strlen()计算出总票数(”254″)的字符串长度$i(3),用PHP函数substr()提取出单个的数字(2、5和4),用“.”将html图片显示代码以string形式连接起来。 [...]

发表您的高见

:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!:

.