ip地址查询
ip地址查询,ip查询,ip所在地查询
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>ip归属地</title>
</head>
<body>
<h1>站长爱好者网IP地址查询</h1>
<form id="form1" name="form1" method="post" action="">
<input type="text" name="ipinfo" id="ipinfo" style="border:solid 1px #fdbdd5" />
<input type="submit" name="button" id="button" value="查询" style="border:solid 1px #fdbdd5;width:50px" />
</form>
<?php
include("ipcheck.class.php");
$ipinfo=$_POST['ipinfo'];
$iptest=new IpLocation();
echo $iptest->getlocation($ipinfo);
?>
</body>
</html>
好现在来看看ipcheck.class.php文件.
<?php
/**
* @author 网事如风
* E-mail:rainrenamy@gmail.com
* 个人网址:http://www.adminfan.com
* 演示地址:http;//www.adminfan.com/seo/ip.php
*/
class IpLocation {
/**
* QQWry.Dat文件指针
* @var resource
*/
var $fp;
/**
* 第一条IP记录的偏移地址
*
* @var int
*/
var $firstip;
/**
* 最后一条IP记录的偏移地址
*
* @var int
*/
var $lastip;
/**
* IP记录的总条数(不包含版本信息记录)
*
* @var int
*/
var $totalip;
/**
* 返回读取的长整型数
*
* @access private
* @return int
*/
function getlong() {
//将读取的little-endian编码的4个字节转化为长整型数
$result = unpack('Vlong', fread($this->fp, 4));
return $result['long'];
}
/**
* 返回读取的3个字节的长整型数
*
* @access private
* @return int
*/
function getlong3() {
//将读取的little-endian编码的3个字节转化为长整型数
$result = unpack('Vlong', fread($this->fp, 3).chr(0));
return $result['long'];
}
/**
* 返回压缩后可进行比较的IP地址
*
* @access private
* @param string $ip
* @return string
*/
function packip($ip) {
// 将IP地址转化为长整型数,如果在PHP5中,IP地址错误,则返回False,
// 这时intval将Flase转化为整数-1,之后压缩成big-endian编码的字符串
return pack('N', intval(ip2long($ip)));
}
/**
* 返回读取的字符串
*
* @access private
* @param string $data
* @return string
*/
function getstring($data = "") {
$char = fread($this->fp, 1);
while (ord($char) > 0) { // 字符串按照C格式保存,以\0结束
$data .= $char; // 将读取的字符连接到给定字符串之后
$char = fread($this->fp, 1);
}
return $data;
}
/**
* 返回地区信息
*
* @access private
* @return string
*/
function getarea() {
$byte = fread($this->fp, 1); // 标志字节
switch (ord($byte)) {
case 0: // 没有区域信息
$area = "";
break;
case 1:
case 2: // 标志字节为1或2,表示区域信息被重定向
fseek($this->fp, $this->getlong3());
$area = $this->getstring();
break;
default: // 否则,表示区域信息没有被重定向
$area = $this->getstring($byte);
break;
}
return $area;
}
/**
* 根据所给 IP 地址或域名返回所在地区信息
*
* @access public
* @param string $ip
* @return array
*/
function getlocation($ip) {
if (!$this->fp) return null; // 如果数据文件没有被正确打开,则直接返回空
$location['ip'] = gethostbyname($ip); // 将输入的域名转化为IP地址
$ip = $this->packip($location['ip']); // 将输入的IP地址转化为可比较的IP地址
// 不合法的IP地址会被转化为255.255.255.255
// 对分搜索
$l = 0; // 搜索的下边界
$u = $this->totalip; // 搜索的上边界
$findip = $this->lastip; // 如果没有找到就返回最后一条IP记录(QQWry.Dat的版本信息)
while ($l <= $u) { // 当上边界小于下边界时,查找失败
$i = floor(($l + $u) / 2); // 计算近似中间记录
fseek($this->fp, $this->firstip + $i * 7);
$beginip = strrev(fread($this->fp, 4)); // 获取中间记录的开始IP地址
// strrev函数在这里的作用是将little-endian的压缩IP地址转化为big-endian的格式
// 以便用于比较,后面相同。
if ($ip < $beginip) { // 用户的IP小于中间记录的开始IP地址时
$u = $i - 1; // 将搜索的上边界修改为中间记录减一
}
else {
fseek($this->fp, $this->getlong3());
$endip = strrev(fread($this->fp, 4)); // 获取中间记录的结束IP地址
if ($ip > $endip) { // 用户的IP大于中间记录的结束IP地址时
$l = $i + 1; // 将搜索的下边界修改为中间记录加一
}
else { // 用户的IP在中间记录的IP范围内时
$findip = $this->firstip + $i * 7;
break; // 则表示找到结果,退出循环
}
}
}
//获取查找到的IP地理位置信息
fseek($this->fp, $findip);
$location['beginip'] = long2ip($this->getlong()); // 用户IP所在范围的开始地址
$offset = $this->getlong3();
fseek($this->fp, $offset);
$location['endip'] = long2ip($this->getlong()); // 用户IP所在范围的结束地址
$byte = fread($this->fp, 1); // 标志字节
switch (ord($byte)) {
case 1: // 标志字节为1,表示国家和区域信息都被同时重定向
$countryOffset = $this->getlong3(); // 重定向地址
fseek($this->fp, $countryOffset);
$byte = fread($this->fp, 1); // 标志字节
switch (ord($byte)) {
case 2: // 标志字节为2,表示国家信息又被重定向
fseek($this->fp, $this->getlong3());
$location['country'] = $this->getstring();
fseek($this->fp, $countryOffset + 4);
$location['area'] = $this->getarea();
break;
default: // 否则,表示国家信息没有被重定向
$location['country'] = $this->getstring($byte);
$location['area'] = $this->getarea();
break;
}
break;
case 2: // 标志字节为2,表示国家信息被重定向
fseek($this->fp, $this->getlong3());
$location['country'] = $this->getstring();
fseek($this->fp, $offset + 8);
$location['area'] = $this->getarea();
break;
default: // 否则,表示国家信息没有被重定向
$location['country'] = $this->getstring($byte);
$location['area'] = $this->getarea();
break;
}
if ($location['country'] == " CZ88.NET") { // CZ88.NET表示没有有效信息
$location['country'] = "未知";
}
if ($location['area'] == " CZ88.NET") {
$location['area'] = "";
}
//return $location;
echo "你的IP:".$location['ip']."<br />来自".$location['country'].$location['area'];
}
/**
* 构造函数,打开 QQWry.Dat 文件并初始化类中的信息
*
* @param string $filename
* @return IpLocation
*/
function IpLocation($filename = "QQWry.Dat") {
if (($this->fp = @fopen($filename, 'rb')) !== false) {
$this->firstip = $this->getlong();
$this->lastip = $this->getlong();
$this->totalip = ($this->lastip - $this->firstip) / 7;
//注册析构函数,使其在程序执行结束时执行
register_shutdown_function(array(&$this, '_IpLocation'));
}
}
/**
* 析构函数,用于在页面执行结束后自动关闭打开的文件。
*
*/
function _IpLocation() {
fclose($this->fp);
}
}
?>
php经典分页类
<?php
class db
{
public $conn,$db,$table,$user,$host,$unm,$pwd;
public $res;
public $char;
public $linkType;
function __construct($linkType=false,$char="gb2312")
{
$this->linkType=$linkType;//设定连接类型
$this->char=$char;//设定连接校对字符
$this->db=DB;
$this->user=USER;
$this->host=HOST;
$this->unm=UNM;
$this->pwd=PWD;
if($this->linkType)
{
$this->conn=mysql_pconnect($this->host,$this->unm,$this->pwd) or die("Database connection failure");
}
else
{
$this->conn=mysql_connect($this->host,$this->unm,$this->pwd) or die("Database connection failure");
}
mysql_select_db($this->db);
mysql_query("set names ".$this->char);
}
function query($sql,$type="true")
{
//$type:默认的操作。 指代select操作
$this->res=mysql_query($sql) or die("SQL Statement error !Please check it again");
$row=$type?mysql_num_rows($this->res):mysql_affected_rows();
$result["res"]=$this->res;
$result["row"]=$row;
return $result;
}
//fetch()方法:获取所有的记录,并写入数组
function fetch($sql)
{
$res=self::query($sql);
while ($rs=mysql_fetch_array($res["res"]))
{
$result[]=$rs;
}
return $result;
}
//获取下一条记录
function fetchNext($filed,$currenID,$table)
{
$sql="select * from $table where $filed>$currenID limit 0,1 ";
return self::fetch($sql);
}
//获取前一条记录
function fetchPre($filed,$currenID,$table)
{
$sql="select * from $table where $filed<$currenID limit 0,1 ";
return self::fetch($sql);
}
}
class page extends db
{
public $currentPage,$totalRecord,$totalPage,$pageSize;
public $start;
public $flag;
public $sql;
function __construct($sql,$pagesize=5,$flag="page")
{
$this->sql=$sql;
$this->pageSize=$pagesize;
$this->flag=$flag;//设定翻页链接标识符
$row=parent::query($sql);
$this->totalRecord=$row["row"];
$this->totalPage=ceil($this->totalRecord/$this->pageSize);
$page=$_REQUEST[$this->flag];
if($page<0||$page=="")
{
$this->currentPage=1;
}
else
{
$page>$this->totalPage?$this->currentPage=$this->totalPage:$this->currentPage=$page;
}
$this->start=($this->currentPage-1)*$this->pageSize;
}
//显示分页列表
function show($page=10)
{
$str.='<div class="pages_btns"><div class="pages">';
$str.="<em> ".$this->totalRecord." </em>";
$pre=$this->currentPage-1;
if($pre!=0)
{
$str.='<a href=?'.$this->flag.'='.$pre.' class=next><<</a>';
}
if($this->currentPage>=$page)
{
if($this->totalPage-$this->currentPage<10)
{
$start=$this->currentPage-($this->currentPage%10);
$end=$this->totalPage;
}
else
{
$start=$this->currentPage-2;
$end=$start+$page-1;
}
}
else
{
$start=1;
$end=10;
}
for ($i=$start;$i<=$end;$i++)
{
if($i==$this->currentPage)
{
$str.="<strong>".$i."</strong>";
}
else
{
$str.="<a href=?".$this->flag."=$i>$i</a>";
}
}
$next=$this->currentPage+1;
$str.='<a href=?'.$this->flag.'='.$next.' class=next>>></a>';
$str.="<a href=?".$this->flag."=".$this->totalPage." class=last>...".$this->totalPage."</a>";
$str.="<kbd><input type='text' name='custompage' size='3' onkeydown=\"if(event.keyCode==13) {window.location='{$_SERVER['PHP_SELF']}?{$this->flag}='+this.value; return false;}\" /></kbd>";
$str.="</div></div>";
return $str;
}
}
?>
<?php
define("HOST","localhost");
define("UNM","root");
define("PWD","root");
define("DB","test");
require_once('db.class.php');
$db=new db();
$sql="select * from yy";
$page=new page($sql,10);
$sql.=" limit $page->start,$page->pageSize";
$rs = $db->fetch($sql);
?>
<table width="100%" border="0" cellpadding="0" cellspacing="1" bgcolor="#FF0000">
<tr>
<td height="25" bgcolor="#FFFFFF">ID</td>
<td bgcolor="#FFFFFF">UNM</td>
</tr>
<?php
for($i=0;$i<count($rs);$i++)
{
?>
<tr>
<td height="25" bgcolor="#FFFFFF"><?=$rs[$i][0]?></td>
<td bgcolor="#FFFFFF"><?=$rs[$i][1]?></td>
</tr>
<?php
}
?>
<tr>
<td height="25" colspan="2" bgcolor="#FFFFFF"><?=$page->show()?></td>
</tr>
</table>
php简单的投票系统[原创]
<?php
include_once("../inc/connect.php");
$value =$_SERVER['HTTP_HOST'];
if(empty($_COOKIE["cook"])){
if(sizeof($_POST)<9){ exit("<script>alert('对不起,你还有选项未选!');history.back();</script>");}
for($i=1;$i<=8;$i++){
$c =$_POST['r'.$i];
switch( intval($c) ){
case 0:
$word ='vote_r1';
break;
case 1:
$word ='vote_r2';
break;
case 2:
$word ='vote_r3';
break;
default:
exit('error');
}
$sql ="update gx_votes set $word=$word+1,vote_times=vote_times+1 where id=$i";
mysql_query($sql) or die(mysql_error());
}
if( !empty($_POST['r9']) || !empty($_POST['r10']) ){ sava_voteinfo();}
echo "<script>alert('感谢你的参与,你的报表己提交!');history.back();</script>";
setcookie("cook", $value, time()+7200, "/");
}else{
print "对不起,你己经投票了,<a href=# onclick=\"history.back();\">点击返回</a>";
}
function sava_voteinfo(){
$vote_modi =addslashes(php_sava(isset($_POST['r9'])?$_POST['r9']:''));
$vote_info =addslashes(php_sava(isset($_POST['r10'])?$_POST['r10']:''));
$vote_ip =isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:'未获取到IP';
$vote_time =date("Y-m-d H:i:s");
$vote_sql ="Insert into gx_voteguest(vote_ip,vote_modi,vote_info,vote_time) value('$vote_ip','$vote_modi','$vote_info','$vote_time')";
mysql_query($vote_sql) or die('error');
}
function php_sava($str)
{
$farr = array(
"/\s+/",
"/<(\/?)(script|i?frame|style|html|body|title|link|meta|\?|\%)([^>]*?)>/isU",
"/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU",
);
$tarr = array(
" ",
"<\\1\\2\\3>", //如果要直接清除不安全的标签,这里可以留空
"\\1\\2",
);
$str = preg_replace( $farr,$tarr,$str);
return $str;
}
?>
<?
header("content-type:text/html; charset=utf-8");
$file_name=$_GET['name']; //服务器的真实文件名
$file_realName=urldecode($_GET['real']); //数据库的文件名urlencode编码过的
$file_dir="upload/";
$file = fopen($file_dir . $file_name,"r"); // 打开文件
// 输入文件标签
header( "Pragma: public" );
header( "Expires: 0" );
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length: ".filesize($file_dir . $file_name));
Header("Content-Disposition: attachment; filename=" . iconv("UTF-8","GB2312//TRANSLIT",$file_realName));
// 输出文件内容
echo fread($file,filesize($file_dir . $file_name));
fclose($file);
exit;
?>
简单php生成 execel表格 程序
header("Content-type:application/vnd.ms-excel");
header("Content-Disposition:filename=test.xls");
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
echo "test2\t\n";
echo "test1\t";
相关文章
- 这篇文章主要介绍了Mybatis Plus select 实现只查询部分字段的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-01
MyBatisPlus-QueryWrapper多条件查询及修改方式
这篇文章主要介绍了MyBatisPlus-QueryWrapper多条件查询及修改方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2022-06-27- 这篇文章主要介绍了Oracle使用like查询时对下划线的处理方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-16
- 这篇文章主要介绍了解决mybatis-plus 查询耗时慢的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-04
- c#获取本机的IP地址的代码,需要的朋友可以参考一下...2020-06-25
- 如果需要在查询语句返回的列中包含一列表示该条记录在整个结果集中的行号, ISO SQL:2003 标准提出的方法是提供 ROW_NUMBER() / RANK() 函数。 Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的 ROWNUM ; MS SQL...2015-03-15
- 这篇文章主要为大家详细介绍了Node实现搜索框进行模糊查询,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-06-28
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
这篇文章主要介绍了Element-ui 自带的两种远程搜索(模糊查询)用法讲解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-29- 这篇文章主要为大家详细介绍了微信小程序实现选择地址省市区三级联动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-21
- 这篇文章主要介绍了Mybatis用注解写in查询的实现方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-13
- 这篇文章主要介绍了Select下拉框模糊查询功能实现代码的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2016-07-29
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
本文讲解如何通过ajax查询mysql数据,并将返回的数据显示在待选列表中,再通过选择最终将选项加入到已选区,可以用在许多后台管理系统中。本文列表框的操作依赖jquery插件。HTML <form id="sel_form" action="post.php" me...2015-10-23- 这篇文章主要介绍了Mybatis和Mybatis-Plus时间范围查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-08-06
- MySQL提供标准的SQL模式匹配,以及一种基于象Unix实用程序如vi、grep和sed的扩展正则表达式模式匹配的格式 一、SQL模式SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL...2013-10-04
JPA如何使用nativequery多表关联查询返回自定义实体类
这篇文章主要介绍了JPA如何使用nativequery多表关联查询返回自定义实体类,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-11-18- 这篇文章主要介绍了C#百万数据查询出现超时问题的解决方法,是非常实用的技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了postgresql的jsonb数据查询和修改的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-03-03
- 这篇文章主要介绍了Mybatis-Plus根据时间段去查询数据的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-04-18
- 这篇文章主要介绍了C#实现获取MAC地址的方法,很实用的功能,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了postgresql数据库连接数和状态查询操作,具有很好的参考价值,对大家有所帮助。一起跟随小编过来看看吧...2021-02-01