ip地址转换成十进制实现程序

 更新时间:2016年11月25日 15:49  点击:2280
网上下载的IP地址数据库中的IP地址并非是我们常见的格式(61.175.232.30),而是这种(1034938398)类型的数据,看起来这两个数据好像没有关连,很复杂,其实并不复杂

,以“61.175.232.30”这个IP地址为例,IP地址转换成数字串方法如下:先将“61.175.232.30”转换为十六进制“3d.af.e8.1e”,然后去掉小数点后,变为“3dafe81e”,最后将这个十六进制数转换为十进制“1034938398”,那么“61.175.232.30”就变为“1034938398”了。


方法一:

 代码如下 复制代码

public function ipToLong(){
        $ip = $_SERVER['REMOTE_ADDR'];
        $ip = explode('.', $ip);
        $ip = array_reverse($ip);//数组反转
        $r = 0;
        for($i=0,$j=count($ip); $i<$j; $i++){
            $r += $ip[$i] * pow(256, $i);
        }
        $r = sprintf("%u", $r);
        echo $r;
}

方法二:

 代码如下 复制代码

public function ipToLong(){
        $ip = $_SERVER['REMOTE_ADDR'];
        $ip = explode('.',$ip);
        $r = ($ip[0] << 24) | ($ip[1] << 16) | ($ip[2] << 8) | $ip[3];
        if($r < 0) $r += 4294967296;
        echo $r ;
}

经测试本地的ip是:192.168.1.101,两个方法转换结果是3232235877

ping 192.168.1.101 和 ping 3232235877是一样的。


下面提供用C#实现IP地址转换的代码:

代码

    

 代码如下 复制代码

   //IP地址
       string Ip = "61.175.232.30";
       //取出IP地址去掉‘.’后的string数组
       string [] Ip_List = Ip.Split (".".ToCharArray ());
       string X_Ip = "";
       //循环数组,把数据转换成十六进制数,并合并数组(3dafe81e)
       foreach(string ip in Ip_List)
       {
               X_Ip += Convert.ToInt16 (ip).ToString ("x");
       }

       //将十六进制数转换成十进制数(1034938398)
       long N_Ip = long.Parse (X_Ip, System.Globalization.NumberStyles.HexNumber);

      OK,就这样转换成功了,不信,你可以用windows的命令行工具测试一下,ping 61.175.232.30 和 ping 1034938398 的效果是一样的,都是指向 61.175.232.30 的。

本文章介绍了一段关于不用递归实现php树程序代码,有需要的朋友可参考一下。
 代码如下 复制代码

/**
 * 创建父节点树形数组
 * 参数
 * $ar 数组,邻接列表方式组织的数据
 * $id 数组中作为主键的下标或关联键名
 * $pid 数组中作为父键的下标或关联键名
 * 返回 多维数组
 **/
function find_parent($ar, $id='id', $pid='pid') {
  foreach($ar as $v) $t[$v[$id]] = $v;
  foreach ($t as $k => $item){
    if( $item[$pid] ){
      if( ! isset($t[$item[$pid]]['parent'][$item[$pid]]) )
         $t[$item[$id]]['parent'][$item[$pid]] =& $t[$item[$pid]];
    }
  }
  return $t;
}


/**
 * 创建子节点树形数组
 * 参数
 * $ar 数组,邻接列表方式组织的数据
 * $id 数组中作为主键的下标或关联键名
 * $pid 数组中作为父键的下标或关联键名
 * 返回 多维数组
 **/
function find_child($ar, $id='id', $pid='pid') {
  foreach($ar as $v) $t[$v[$id]] = $v;
  foreach ($t as $k => $item){
    if( $item[$pid] ) {
      $t[$item[$pid]]['child'][$item[$id]] =& $t[$k];
    }
  }
  return $t;
}

    $data = array(
      array('ID'=>1, 'PARENT'=>0, 'NAME'=>'祖父'),
      array('ID'=>2, 'PARENT'=>1, 'NAME'=>'父亲'),
      array('ID'=>3, 'PARENT'=>1, 'NAME'=>'叔伯'),
      array('ID'=>4, 'PARENT'=>2, 'NAME'=>'自己'),
      array('ID'=>5, 'PARENT'=>4, 'NAME'=>'儿子'),
    );

    $p = find_parent($data, 'ID', 'PARENT');
    $c = find_child($data, 'ID', 'PARENT');
    Print_r ($c);

结果

 代码如下 复制代码

Array
(
    [1] => Array
        (
            [ID] => 1
            [PARENT] => 0
            [NAME] => 祖父
            [child] => Array
                (
                    [2] => Array
                        (
                            [ID] => 2
                            [PARENT] => 1
                            [NAME] => 父亲
                            [child] => Array
                                (
                                    [4] => Array
                                        (
                                            [ID] => 4
                                            [PARENT] => 2
                                            [NAME] => 自己
                                            [child] => Array
                                                (
                                                    [5] => Array
                                                        (
                                                            [ID] => 5
                                                            [PARENT] => 4
                                                            [NAME] => 儿子
                                                        )

                                                )

                                        )

                                )

                        )

                    [3] => Array
                        (
                            [ID] => 3
                            [PARENT] => 1
                            [NAME] => 叔伯
                        )

                )

        )

    [2] => Array
        (
            [ID] => 2
            [PARENT] => 1
            [NAME] => 父亲
            [child] => Array
                (
                    [4] => Array
                        (
                            [ID] => 4
                            [PARENT] => 2
                            [NAME] => 自己
                            [child] => Array
                                (
                                    [5] => Array
                                        (
                                            [ID] => 5
                                            [PARENT] => 4
                                            [NAME] => 儿子
                                        )

                                )

                        )

                )

        )

    [3] => Array
        (
            [ID] => 3
            [PARENT] => 1
            [NAME] => 叔伯
        )

    [4] => Array
        (
            [ID] => 4
            [PARENT] => 2
            [NAME] => 自己
            [child] => Array
                (
                    [5] => Array
                        (
                            [ID] => 5
                            [PARENT] => 4
                            [NAME] => 儿子
                        )

                )

        )

    [5] => Array
        (
            [ID] => 5
            [PARENT] => 4
            [NAME] => 儿子
        )

)

phpmyadmin出错:缺少 mcrypt 扩展。请检查 PHP 配置。phpmyadmin无法加载解决方案: 今天配置phpMyAdmin出现了这个错: 无法载入 mcrypt 扩展,请检查 PHP 配置

出现以下几种情况后可能会造成运行phpmyadmin程序提示“无法载入 mcrypt 扩展,请检查 PHP 配置”的 错误提示
1、没有正确安装Mysql数据库,在系统服务中Mysql相关的服务没有启动   (请查看正确安装Mysql的方法)
2、在系统的 system32(C:windowssystem32) 目录下缺少 libmcrypt.dll文件,解决方法是找到php目录下的libmcrypt.dll,并将libmcrypt.dll复制到C:windows system32目录中,然后重新启动Web服务。
3、在C:windows目录下的php.ini文件中,没有将“;extension=php_mcrypt.dll”中的前面一个“;”去掉,所以不能使用相应功能,解决方法是打开php.ini文件
找到
;extension=php_mcrypt.dll
改成
extension=php_mcrypt.dll    //去掉前面的;使之生效
4、Mysql目录没有读取权限,正确的目录权限如下:
administrator   完全控制
system    完全控制
user    读取加运行
其他的用户权限全部删除(也可保留,但安全性不高,建议删除),然后重启MYsql服务和Web服务(建议修改此项后重启一下服务器)
当你试过所有办法之后还是不行,其实还有一步,网上很少有说,解决办法,我的是WINXP+IIS+PHP5+MYSQL5
棹面>我的电脑>右键属性>高级>环境变量>系统变量>新建
名:phprc值:d:php  (你的PHP在什么目录就是什么)

 

本文章总结了目前常用的几种分页代码,比如说上一页,下一页之类的,还有一种数字分页,像1,2,3...之类的等

 

分页代码

 代码如下 复制代码
<?php
  //page当前页,num每页的页数
  $page=isset($_GET['page'])?intval($_GET['page']):1;
  $num=5;
  $conn = mysql_connect('127.0.0.1','root','');
  if (!$conn) {
   die('Could not connect:'.mysql_error());
  }
  mysql_select_db('shop');
  //获取记录总数
  $total=mysql_num_rows(mysql_query("select * from user"));
  //计算页数
  $pagenum=ceil($total/$num);
  //限制页数不能超出范围
  If($page>$pagenum || $page == 0){
    Echo 'Error : Can Not Found The page.';
    Exit;
  }
  //语句“Select * from table limit 0,10”从table表提取十条信息,0为起点,10为提取的数目
  //$offset为起点值,如当前页为第一页,每页5条,起点即为0,同理当前为第二页,起点将为5
  $offset=($page-1)*$num;
  $result=mysql_query("select * from user limit $offset,$num");
  while($it=mysql_fetch_array($result)){
    echo 'id:'.$it['id'].' name:'.$it['name'].'<br />';
  }
  //显示链接页面切换链接,当前页无链接
  for($i=1;$i<=$pagenum;$i++){
    $show=($i!=$page)?"<a href='index.php?page=".$i."'>$i</a>":"<b>$i</b>";
    echo $show." ";
  }
  echo $total.'条记录,每页5条,共'.$pagenum.'页';
   mysql_free_result($result);
  mysql_close($conn);
?>

实例2

 代码如下 复制代码

<?

//function.php  这里是主函数
function php_page($page_dbname,$page_size,$page)
{
if ($page=="")
 {$page=1;};
if ($ljjl=="")
 {$ljjl=0;};
if($page)
  {
    //$page_dbname="tb_insert";
 //$page_size=4;          //每页显示4条记录
    $query="select count(*) as total from ".$page_dbname;  //从数据库中读取数据
 $result=mysql_query($query);
    $message_count=mysql_result($result,0,"total");  //获取总的记录数
    $page_count=ceil($message_count/$page_size);  //获取总的页数
    $offset=($page-1)*$page_size;  
    $query="select * from ".$page_dbname." order by id desc limit $offset, $page_size";  
 $result=mysql_query($query);
//内容显示 这里只是简单的作个示范,可以按你的要求随便改动。
 while ($myrow=@mysql_fetch_array($result))
 {
  echo $myrow[name]." | ".$myrow[number]." | ".$myrow[tel]." | ".$myrow[address]."<br><br>";
  }
 
}
 echo "页次:".$page."/";
 echo $page_count."页 记录:";
 echo $message_count."条"."<br>";

  if($page!=1)
   {
    echo  "<a href=index.php?page=1>首页</a>&nbsp;";
       echo "<a href=index.php?page=".($page-1).">上一页</a>&nbsp;";
    }
  else
   {
    echo  "首页&nbsp;";
       echo "上一页&nbsp;";  
   }
 
  for($i=1; $i<=$page_count; $i++)
  {
   if ($page==$i)
    {echo  $i."&nbsp;";}
    else
       {echo  "<a href=index.php?page=$i>$i</a>&nbsp;";}
   }
 
  if($page<$page_count)
   {
    echo "<a href=index.php?page=".($page+1).">下一页</a>&nbsp;";
    echo  "<a href=index.php?page=".$page_count.">尾页</a>";
   }
  else
   {
    echo "下一页&nbsp;";
    echo  "尾页";
   }
}
?>

//conn.php   连接数据库

 代码如下 复制代码

<?php

$id=mysql_connect("localhost","root","root")or dir('连接失败:' . mysql_error());
//mysql_connect("IP","用户名","密码")

if(mysql_select_db("db_database06",$id))
echo "";
else
echo ('连接失败:' . mysql_error());
mysql_query("set names gb2312");
?>

//主程序,将上面俩个文件包含进来,再调用一个php_page()就可完成分页。:)

 代码如下 复制代码

 <?php

require_once("conn.php");
require_once("function.php");
php_page("tb_insert",3,$_GET[page]); // "tb_insert"是表名,3是在每页要显示的记录数,$_GET[page]是page的id,直接用就可以了。
?> 

上在的一种是文字分页,比如说上一页,下一页之类的,还有一种数字分页,像1,2,3...之类的,这个比较简单,前者稍微复杂些.最后一种是他们2者结合

 代码如下 复制代码

--> 1 //获取当前页数
         if(isset($_GET['page'])){
             $page = intval($_GET['page']);
         }
         else {
             $page=1;
         }
         $PageSize = 1; //每页的记录数量
         // 获取总数量
         $sql = "select count(*) from blog";
         $result = mysql_query($sql);
         $row = mysql_fetch_row($result);
         $amount = $row[0];
         /*计算总页数
         if($amount){
             if($amount<$PageSize) { //如果总数量小于每页的记录数量$PageSize,那么只有一页.
                 $PageCount = 1;
             }
             if($amount%$PageSize) { //总数量除以每页的记录数量取于
                 $PageCount =& amp;nbsp;(int)($amount/$PageSize)+1;//如果有于,则页数等于总数量除每页的记录数加1
             }
             else{
                 $PageCount =& amp;nbsp;$amount/$PageSize;//没有,则结果是页数
             }
         }
         else{
             $PageCount = 0;
         }*/
         $PageCount = ceil($amount/$PageSize);//总页数=总数量除以每页数量  如果有小树,则进位< span style="color: #008000;">
         if($Page>$PageCount|$page==0){// 如果当前页数大于总页数
             echo "不能发现此页!";
             exit();
         }
      
         //翻页链接
         $PageOut = '';
         if($page==1){//如果页数只有一页
             $PageOut .= '第一页|上一页';
         }
         else{
             $PageOut .= '<a href="index.php?page=1">第一页& lt;/a>|<a href="index.php?page='.($page-1).'">上一页</a>|';
         }
         if($page==$PageCount||$PageCount==0){//如果当前页等于总也数
             $PageOut .= '下一页|尾页';
         }
         else{
             $PageOut .=  '<a href="index.php?page='.($page+1).'">下一页</a>|<a href="index.php?page='.$PageCount.'">尾页</a>';
         }
         //获取数据
         if($amount){
         $sql="select * from blog limit ".($page-1)*($PageSize).",$PageSize";
         $result=mysql_query($sql);
         while($row=mysql_fetch_array($result)){//此段代码只是示例
             $blogs[] = array('bid'=>$row['bid'],'title'=>$row['title']);
             foreach ($blogs as $blog){
             $title=$blog['title'];
             }
             $output = "<a href=index.php?action=blog_del&bid=$blog[bid]>删除</a>".
             "<a href=index.php?action=blog_edit&bid=$blog[bid]>编辑</a>".
             "<a href=index.php?action=blog_view&bid=$blog[bid]>查看</a>";
             include("template/default/blog.tpl.php");
             echo $PageOut;
         }
         for($i=1;$i<=$PageCount;$i++){//数字分页
            $Pageshow = ($i!=$page)?"<a href='index.php?page=".$i."'>$i</a>":"<b>$i</b>";
            echo $PageShow;
          }
          echo $amount.'条记录,每页'.$PageSize.'条,共'.$PageCount.'页';
         }

文章总结了一种比较好的UTF8中文字符截断程序实例分享给大家参考。

最简单的字符截取函数是用php自带的substr()

其实,PHP原生就有多charset下字符截取方案,额,所以就是这个样子...??.

Multibyte String Functions函数族中,


string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )  用来字符串截取

int mb_strlen ( string $str [, string $encoding ] )  返回字符串长度

但它只支持数字与字母不支持中文

实例

UTF8中文字符截断

 代码如下 复制代码
<?php
 /* UTF-8中文字符截断程序 */
 
 
 $str = "123这是测试字符串";
 $str1 = "()()";
 echo subUTF8str($str,0,3)."<br>";
 echo subUTF8str($str,0,4)."<br>";
 echo subUTF8str($str1,0,4)."<br>";
 echo subUTF8str($str1,0,10)."<br>";
 
 function subUTF8str($str,$start=0,$length=80){
    $cur_len = 0; //人理解的字符串长度
    $all_len = strlen($str); //机器理解字符串长度
    if($length > $all_len)
    {
         return $str;
    }
    for($i = 0;$i < $all_len;)
    {
         if($cur_len == $start)
         {
             break;
         }
         if (ord($str[$i]) > 127)
         {
             $i += 3;
         }else{
             $i += 1;
         }
         $cur_len ++;
    }
     $start_pos = $i;
     $temp_pos = $cur_len;
     for(;$cur_len - $temp_pos < $length;)
     {
         if($i >= $all_len)
             break;
         if (ord($str[$i]) > 127)
         {
             $i += 3;
         }else{
             $i += 1;
         }
         $cur_len ++;
     }
     $end_pos = $i;
     return substr($str,$start_pos,$end_pos);
 }
 ?>

改进后我们把它分页,这样可支持ut8与gbk等中文字符截取

 代码如下 复制代码

function substrs($content, $length){
 if($length && strlen($content)>$length){
  if($db_charset!='utf-8'){
   $retstr='';
   for($i = 0; $i < $length - 2; $i++) {
    $retstr .= ord($content[$i]) > 127 ? $content[$i].$content[++$i] : $content[$i];
   }
   return $retstr;
  }else{
   return utf8_trim(substr($content,0,$length*3));
  }
 }
 return $content;
}

function utf8_trim($str) {
 $len = strlen($str);
 for($i=strlen($str)-1;$i>=0;$i-=1){
  $hex .= ' '.ord($str[$i]);
  $ch   = ord($str[$i]);
  if(($ch & 128)==0) return substr($str,0,$i);
  if(($ch & 192)==192)return substr($str,0,$i);
 }
 return($str.$hex);
}

[!--infotagslink--]

相关文章

  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • php语言实现redis的客户端

    php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
  • jQuery+jRange实现滑动选取数值范围特效

    有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
  • 在数据库里将毫秒转换成date格式的方法

    在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
  • Javascript类型转换的规则实例解析

    这篇文章主要介绍了Javascript类型转换的规则实例解析,涉及到javascript类型转换相关知识,对本文感兴趣的朋友一起学习吧...2016-02-27
  • JS实现的简洁纵向滑动菜单(滑动门)效果

    本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
  • 美图秀秀把普通照片快速转换成卡通效果教程

    今天小编在这里就来给美图秀秀的这一款软件的使用者们来说下把普通照片快速转换成卡通效果的教程,各位想知道具体制作步骤的使用者们,那么下面就快阿里跟着小编一起看一...2016-09-14
  • jQuery+slidereveal实现的面板滑动侧边展出效果

    我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15
  • PHP+jQuery翻板抽奖功能实现

    翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
  • SQLMAP结合Meterpreter实现注入渗透返回shell

    sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25
  • 浅析C#数据类型转换的几种形式

    本篇文章是对C#中数据类型转换的几种形式进行了详细的分析介绍,需要的朋友参考下...2020-06-25
  • PHP实现今天是星期几的几种写法

    复制代码 代码如下: // 第一种写法 $da = date("w"); if( $da == "1" ){ echo "今天是星期一"; }else if( $da == "2" ){ echo "今天是星期二"; }else if( $da == "3" ){ echo "今天是星期三"; }else if( $da == "4"...2013-10-04
  • PHP编码转换函数mb_convert_encoding与iconv用法

    文章来实现一个PHP编码转换函数mb_convert_encoding与iconv用法,希望例子能帮助到各位。 将一个短信接口代码从apache迁移到nginx+php-fpm后,发现无法发出短信了,查...2016-11-25
  • c#入门之类型转换详解

    这篇文章主要介绍了c#的类型转换详解,类型转换分两种形式:隐式转换、显示转换,下面是详细介绍...2020-06-25
  • JavaScript实现数据类型的相互转换

    这篇文章主要为大家详细介绍了JavaScript实现数据类型的相互转换,感兴趣的朋友可以参考一下...2016-03-09
  • JavaScript实现Base64编码转换

    这篇文章主要介绍了JavaScript实现Base64编码转换的相关资料,非常简单实用,需要的朋友可以参考下...2016-04-25
  • 原生js实现fadein 和 fadeout淡入淡出效果

    js里面设置DOM节点透明度的函数属性:filter= "alpha(opacity=" + value+ ")"(兼容ie)和opacity=value/100(兼容FF和GG)。 先来看看设置透明度的兼容性代码: 复制代码 代码如下: function setOpacity(ele, opacity) { if (...2014-06-07
  • C#将数字转换成字节数组的方法

    这篇文章主要介绍了C#将数字转换成字节数组的方法,涉及C#字符串操作的技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • java中JSONObject转换为HashMap(方法+main方法调用实例)

    这篇文章主要介绍了java中JSONObject转换为HashMap(方法+main方法调用实例),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-14
  • php中iconv编码转换来解决中文乱码的问题

    用到iconv函数把抓取来过的utf-8编码的页面转成gb2312, 发现只有用iconv函数把抓取过来的数据一转码数据就会无缘无故的少一些 代码如下 复制代码 ...2016-11-25