当前位置:  编程技术>php
本页文章导读:
    ▪php IP获取城市API(纯真IP数据库)      本节主要内容: 根据IP地址获取城市名称的php代码。 用到了纯真IP数据库实现。 本例php代码,透过纯真IP数据库的支持,可以精确地定位城市位置。 支持多种查询方式形如:本机IP、自定义.........
    ▪php 天气预报代码一例      本节提供的这段php天气预报代码,其天气预报信息采集自中央气象台,信息准确,覆盖面广,代码简单。 返回是json代码,可以用于客户端调用,也可以在服务器端处理后显示。 注意:此代.........
    ▪PHP 数据库读写分离的经典例子      本节主要内容: php实现mysql数据库的读写分离。 实现代码: 假设: 127.0.0.1:3306 为读的数据库 127.0.0.2:3306 为写的数据库 例子:   代码示例: <? /** * mysql读写分离 * edit: www. */ class db .........

[1]php IP获取城市API(纯真IP数据库)
    来源: 互联网  发布时间: 2013-12-24

本节主要内容:
根据IP地址获取城市名称的php代码。
用到了纯真IP数据库实现。

本例php代码,透过纯真IP数据库的支持,可以精确地定位城市位置。
支持多种查询方式形如:本机IP、自定义IP、自定义域名三种方式。
http://domain/ip 直接查询本机IP所在城市位置
http://domain/ip/?q=xxx.xxx.xxx.xxx 获取自定义IP的城市位置
http://domain/ip/?q=baidu.com 获取域名所在的城市位置

例子:
 

代码示例:
<?php
/**
* 根据IP地址取得城市名称 纯真IP数据库
* edit: www.
*/
  function convertip($ip) {
    //IP数据文件路径
    $dat_path = 'QQWry.Dat';
 
    //检查IP地址
    if(!filter_var($ip, FILTER_VALIDATE_IP)) {
        return 'IP Address Error';
    }
    //打开IP数据文件
    if(!$fd = @fopen($dat_path, 'rb')){
        return 'IP date file not exists or access denied';
    }
 
    //分解IP进行运算,得出整形数
    $ipNum = ip2long($ip);
 
    //获取IP数据索引开始和结束位置
    $DataBegin = fread($fd, 4);
    $DataEnd = fread($fd, 4);
    $ipbegin = implode('', unpack('L', $DataBegin));
    if($ipbegin < 0) $ipbegin += pow(2, 32);
    $ipend = implode('', unpack('L', $DataEnd));
    if($ipend < 0) $ipend += pow(2, 32);     $ipAllNum = ($ipend - $ipbegin) / 7 + 1;          $BeginNum = 0;     $EndNum = $ipAllNum;     //使用二分查找法从索引记录中搜索匹配的IP记录     while($ip1num>$ipNum || $ip2num<$ipNum) {
        $Middle= intval(($EndNum + $BeginNum) / 2);
 
        //偏移指针到索引位置读取4个字节
        fseek($fd, $ipbegin + 7 * $Middle);
        $ipData1 = fread($fd, 4);
        if(strlen($ipData1) < 4) {
            fclose($fd);
            return 'System Error';
        }
        //提取出来的数据转换成长整形,如果数据是负数则加上2的32次幂
        $ip1num = implode('', unpack('L', $ipData1));
        if($ip1num < 0) $ip1num += pow(2, 32);                  //提取的长整型数大于我们IP地址则修改结束位置进行下一次循环         if($ip1num > $ipNum) {
            $EndNum = $Middle;
            continue;
        }
 
        //取完上一个索引后取下一个索引
        $DataSeek = fread($fd, 3);
        if(strlen($DataSeek) < 3) {
            fclose($fd);
            return 'System Error';
        }
        $DataSeek = implode('', unpack('L', $DataSeek.chr(0)));
        fseek($fd, $DataSeek);
        $ipData2 = fread($fd, 4);
        if(strlen($ipData2) < 4) {
            fclose($fd);
            return 'System Error';
        }
        $ip2num = implode('', unpack('L', $ipData2));
        if($ip2num < 0) $ip2num += pow(2, 32);
 
        //没找到提示未知
        if($ip2num < $ipNum) {
            if($Middle == $BeginNum) {
                fclose($fd);
                return 'Unknown';
            }
            $BeginNum = $Middle;
        }
    }
 
    //下面的代码读晕了,没读明白,有兴趣的慢慢读
    $ipFlag = fread($fd, 1);
    if($ipFlag == chr(1)) {
        $ipSeek = fread($fd, 3);
        if(strlen($ipSeek) < 3) {
            fclose($fd);
            return 'System Error';
        }
        $ipSeek = implode('', unpack('L', $ipSeek.chr(0)));
        fseek($fd, $ipSeek);
        $ipFlag = fread($fd, 1);
    }
 
    if($ipFlag == chr(2)) {
        $AddrSeek = fread($fd, 3);
        if(strlen($AddrSeek) < 3) {
            fclose($fd);
            return 'System Error';
        }
        $ipFlag = fread($fd, 1);
        if($ipFlag == chr(2)) {
            $AddrSeek2 = fread($fd, 3);
            if(strlen($AddrSeek2) < 3) {
                fclose($fd);
                return 'System Error';
            }
            $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
            fseek($fd, $AddrSeek2);
        } else {
            fseek($fd, -1, SEEK_CUR);
        }
 
        while(($char = fread($fd, 1)) != chr(0))
            $ipAddr2 .= $char;
 
        $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));
        fseek($fd, $AddrSeek);
 
        while(($char = fread($fd, 1)) != chr(0))
            $ipAddr1 .= $char;
    } else {
        fseek($fd, -1, SEEK_CUR);
        while(($char = fread($fd, 1)) != chr(0))
            $ipAddr1 .= $char;
 
        $ipFlag = fread($fd, 1);
        if($ipFlag == chr(2)) {
            $AddrSeek2 = fread($fd, 3);
            if(strlen($AddrSeek2) < 3) {
                fclose($fd);
                return 'System Error';
            }
            $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
            fseek($fd, $AddrSeek2);
        } else {
            fseek($fd, -1, SEEK_CUR);
        }
        while(($char = fread($fd, 1)) != chr(0)){
            $ipAddr2 .= $char;
        }
    }
    fclose($fd);
 
    //最后做相应的替换操作后返回结果
    if(preg_match('/http/i', $ipAddr2)) {
        $ipAddr2 = '';
    }
    $ipaddr = "$ipAddr1 $ipAddr2";
    $ipaddr = preg_replace('/CZ88.Net/is', '', $ipaddr);
    $ipaddr = preg_replace('/^s*/is', '', $ipaddr);
    $ipaddr = preg_replace('/s*$/is', '', $ipaddr);
    if(preg_match('/http/i', $ipaddr) || $ipaddr == '') {
        $ipaddr = 'Unknown';
    }
 
    return $ipaddr;
}
header("Content-type: text/html; charset=utf-8");
$ip =  $_SERVER['HTTP_X_FORWARDED_FOR'];
if(isset()($_GET['q'])){
    $ip = $_GET['q'];
    if(filter_var("http://".$ip,FILTER_VALIDATE_URL,FILTER_FLAG_HOST_REQUIRED)){
        $ip = gethostbyname($ip);
    }
}
echo "$ip,".mb_convert_encoding(convertip($ip),"utf-8","gb2312");
 
?>

    
[2]php 天气预报代码一例
    来源: 互联网  发布时间: 2013-12-24

本节提供的这段php天气预报代码,其天气预报信息采集自中央气象台,信息准确,覆盖面广,代码简单。
返回是json代码,可以用于客户端调用,也可以在服务器端处理后显示。

注意:此代码会在服务器产生缓存文件,需要在当前目录中新建data文件夹,保证文件夹可写。

例子:
 

代码示例:
<?php
/**
* php 天气预报代码
* by www.
*/
    if(!isset()($_GET['q'])){
        //根据IP查询所在地
        $p = file_get_contents("http://www./ip/?q={$_SERVER['HTTP_X_FORWARDED_FOR']}");
    }
    else{
        $p = $_GET['q'];
    }
    $k = 0;
    $encoding = mb_detect_encoding($p);
    if($encoding != "UTF-8"){
        $p = mb_convert_encoding($p,"utf-8","gbk");
    }
    $p_arr = array(
       "01" => "北京",
      "02" => "上海",
      "03" => "天津",
      "04" => "重庆",
      "05" => "黑龙江",
      "06" => "吉林",
      "07" => "辽宁",
      "08" => "内蒙古",
      "09" => "河北",
      "10" => "山西",
      "11" => "陕西",
      "12" => "山东",
      "13" => "新疆",
      "14" => "西藏",
      "15" => "青海",
      "16" => "甘肃",
      "17" => "宁夏",
      "18" => "河南",
      "19" => "江苏",
      "20" => "湖北",
      "21" => "浙江",
      "22" => "安徽",
      "23" => "福建",
      "24" => "江西",
      "25" => "湖南",
      "26" => "贵州",
      "27" => "四川",
      "28" => "广东",
      "29" => "云南",
      "30" => "广西",
      "31" => "海南",
      "32" => "香港",
      "33" => "澳门",
      "34" => "台湾"
    );
 
    function find(&$item,$key,$data){
        global $k;
        if(preg_match("/$item/u",$data)){
           $k = $key;
        }
    }
 
    function get_data_arr($key){
        if(!file_exists("./data/city{$key}.xml")){
            $c =file_get_contents( "http://m.weather.com.cn/data5/city{$key}.xml" );
            file_put_contents("./data/city{$key}.xml",$c);
        }
        else{
            $c = file_get_contents("./data/city{$key}.xml");
        }
       $arr = explode()(",",$c);
       foreach($arr as $v){
           $data = explode("|",$v);
           $ret[$data[0]] = $data[1];
       }
       return $ret;
    }
 
    array_walk($p_arr,'find',$p);
    array_walk(get_data_arr($k),'find',$p);
    array_walk(get_data_arr($k),'find',$p);
    $ccode = get_data_arr($k);
    echo file_get_contents("http://m.weather.com.cn/data/{$ccode[$k]}.html");
?>

您可能感兴趣的文章:

php调用yahoo sina api天气预报的实现代码
php调用google天气api的实例代码
Google API 获取当前天气信息的php代码

    
[3]PHP 数据库读写分离的经典例子
    来源: 互联网  发布时间: 2013-12-24

本节主要内容:
php实现mysql数据库的读写分离。

实现代码:
假设:
127.0.0.1:3306 为读的数据库
127.0.0.2:3306 为写的数据库
例子:
 

代码示例:
<?
/**
* mysql读写分离
* edit: www.
*/
class db
{
    public function __construct($sql)
    {
        $chestr = strtolower()(trim($sql));
        //判断sql语句有select关键字的话,就连接读的数据库,否则就连接写数据库
        if(substr($chestr,0,6)=='select')
        {
            echo 'I am using select db..<br>';
            $link = mysql_connect()("127.0.0.1:3306", "root", "") or die("Could not connect: " . mysql_error());
            mysql_select_db("test");
            $result = mysql_query()($sql);
            while ($row = mysql_fetch_array($result, MYSQL_NUM))
            {
                printf("%s %s", $row[0],$row[1]);
            }
            echo mysql_get_host_info($link).mysql_get_server_info($link).mysql_get_proto_info($link).mysql_get_client_info().'<br>';        
        }
        else
        {
            echo 'I am using insert db..<br>';
            $link = mysql_connect("127.0.0.2:3306","root","") or die("Could not connect: " . mysql_error());
            mysql_select_db("test");
            $result = mysql_query($sql);
            echo @mysql_affected_rows($result);
            echo mysql_get_host_info($link).mysql_get_server_info($link).mysql_get_proto_info($link).mysql_get_client_info().'<br>';       
        }
         
    }
}
 
$d = new db("  update `users` set `select`='fasdf' where `id` =1");
$d2 = new db("         SELECT * from `users`");

附,数据库读写分享的相关解释。

数据库的读写分离,可以有效降低降低数据库的压力。

一个主数据库,多个从数据库的架构,实现读写分离,是经常用到的方案。
主数据库提供写操作,从数据库提供读操作。
其实分散数据库的压力,并不一定要读写分离,但是读写分离还是有自身的诸多好处的。
比如:
1、有利于数据库的负载均衡实现。
2、有利于实现主从数据库热备份。如果不分离,那么就要考虑做双向热备份策略了。
这个的配置比较复杂,并且出问题后也比较麻烦。
3、有利于保持数据库的高可用性,特别是在数据库集群的环境。
4、最后,实现读写分离后,对mysql的查询速度以及稳定性会更有信心。


    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
▪php数组长度的获取方法(三个实例)
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3