本文以美女时钟的制作为例子,介绍如何使用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”);//获取并显示访客当前时间
?>
还没有订阅shuilog?您OUT啦 ̄▽ ̄





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