首页 > 编程技术 > php

PHP中如何将ip地址转成十进制数

发布时间:2016-11-25 15:45

ip地址转成十进制数是根据的公式算出来的:74×256^3+30×256^2+10×256+243 = 1243482867或者说分别将IP地址的四位数字化成十六进制,将得到的十六进制去掉\"小数点\"后再化为十进制即可。

PHP 中如何将ip地址转成十进制数呢?现在PHP中有很多时候都会用到ip地址,但是这个ip地址获取的时候都不是10进制的。那么PHP中如何将ip地址转成十进制数就是我们比较头疼的事情了,下面两种方法是我整理处理来相对比较简单的IP地址转成十进制数的方法。希望能对大家有所帮助。

方法一:

 代码如下 复制代码

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 ;
}

两个结果在本地服务器中的结果都是3232235877,运用的ip是192.168.1.101。我们用ping 192.168.1.101 和 ping 3232235877来进行检测,看是否一样。

可能有些朋友不知道mysql与php中都提供了IP转换十进制数函数

MySQL 提供了INET_ATON 和 INET_NTOA 两个函数来进行地址和整数之间的转换。

1. IP 由点分格式,转换为数字格式。

 代码如下 复制代码

mysql> select inet_aton('127.0.0.1');
+------------------------+
| inet_aton('127.0.0.1') |
+------------------------+
| 2130706433 |
+------------------------+
1 row in set (0.00 sec)

2. IP 由数字格式转换为点分格式。

 代码如下 复制代码

mysql> select inet_ntoa(2130706433);
+-----------------------+
| inet_ntoa(2130706433) |
+-----------------------+
| 127.0.0.1 |
+-----------------------+
1 row in set (0.00 sec)


php可直接使用ip2long函数

 代码如下 复制代码


echo ip2long('192.168.1.38');
输出:3232235814

本文章来给大家总结一个关于php写入、删除、复制文件及创建修改时间例子,有碰到此类的同学可进入参考。

例子1:

读写文件

 代码如下 复制代码

<?php
$filename = 'txt/write.txt';
//定义要写入的内容
$content = "李先生 36 山东nr王先生 49 湖南nr孙先生 40 河北";
//使用is_writable()函数确定文件存在并且可写
if(is_writable($filename)){
//把文件写入到文件尾,应选择操作标记a
if(false == ($handle = fopen($filename, 'a'))){
echo "文件 $filename 打开失败";
exit();
}
//将$content写入打开的文件
if(fwrite($handle, $content) === false){
echo "写入文件 $filename 失败";
exit();
}
echo "写入文件 $filename 成功";
//关闭句柄
fclose($handle);
}else{
echo "文件 $filename 没有写权限";
}
?>

php写入文件例子2:

 代码如下 复制代码

<?php
$filename = "Test\file.txt";
$file = fopen($filename, "w");      //以写模式打开文件
fwrite($file, "Hello, world!n");      //写入第一行
fwrite($file, "This is a test!n");      //写入第二行
fclose($file);         //关闭文件
?>

删除文件:

 代码如下 复制代码

<?php
$filename = "Test\file.txt";
unlink($filename);    //删除文件
?>

复制文件:

 代码如下 复制代码

<?php
$filename1 = "Test\file.txt";
$filename2 = "Test\file.bak";
copy($filename1, $filename2);      //复制文件
?>

文件创建、修改、访问时间

实例

 代码如下 复制代码

< ?php
$a=filectime("log.txt");
echo "创建时间:".date("Y-m-d H:i:s",$a)."
";
$a=filemtime("log.txt");
echo "修改时间:".date("Y-m-d H:i:s",$a)."
";
$a=fileatime("log.txt");
echo "访问时间:".date("Y-m-d",$a)."
";
?>

PHP fileatime()函数
定义和用法
fileatime() 函数返回指定文件的上次访问时间。

该函数返回文件上次被访问的时间。如果出错则返回 false。时间以 Unix 时间戳的方式返回。

语法
fileatime(filename)  filename 必需。规定要检查的文件。

提示和注释
提示:本函数的结果会被缓存。请使用 clearstatcache() 来清除缓存。

注释:文件的 atime 应该在不论何时读取了该文件中的数据块时被更改。当一个应用程序定期访问大量文件或目录时很影响性能。有些 Unix 文件系统可以在加载时关闭 atime 的更新以提高这类程序的性能。USENET 新闻组假脱机是一个常见的例子。在这种文件系统下,本函数没有用处

今天我们来介绍利用phpqrcode来生成二维码,这量个不错的php二维码生成程序,各位朋友可参考。

PHP生成二维码的方式有多种,可以利用google开放的API,可以利用php QR Code类库生成,本文着重介绍使用php QR Code类库来生成二维码。
1、代码包下载地址:http://sourceforge.net/projects/phpqrcode/
2、下载下来的压缩包里面有很多示例,可以自行研究,下面给出一个简单的使用案例:

 代码如下 复制代码

include "phpqrcode/phpqrcode.php";
$data='http://www.111cn.net';
$errorCorrectionLevel="L";
$matrixPointSize="4";
QRcode::png($data,false,$errorCorrectionLevel,$matrixPointSize);

官方法实例

 代码如下 复制代码

<?php
# include这两个文件之一:
/*
qrlib.php for full version (also you have to provide all library files
form package plus cache dir)

OR phpqrcode.php for merged version (only one file,
but slower and less accurate code because disabled cache
and quicker masking configured)
*/
# 两句话解释:
# 包含qrlib.php的话需要同其它文件放到一起:文件、文件夹。
# phpqrcode.php是合并后版本,只需要包含这个文件,但生成的图片速度慢而且不太准确
# 以下给出两种用法:

# 创建一个二维码文件
QRcode::png('code data text', 'filename.png');
// creates file

# 生成图片到浏览器
QRcode::png('some othertext 1234');
// creates code image and outputs it directly into browser
?>

3、有的二维码中间有图片,其实就是把图片拷贝到已经生成的二维码图片上,你懂得。


利用google生成二维码的开放接口,代码如下

 代码如下 复制代码

/**
 * google api 二维码生成【QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式】
 * @param string $data 二维码包含的信息,可以是数字、字符、二进制信息、汉字。不能混合数据类型,数据必须经过UTF-8 URL-encoded.如果需要传递的信息超过2K个字节,请使用POST方式
 * @param int $widhtHeight 生成二维码的尺寸设置
 * @param string $EC_level 可选纠错级别,QR码支持四个等级纠错,用来恢复丢失的、读错的、模糊的、数据。
 *                         L-默认:可以识别已损失的7%的数据
 *                         M-可以识别已损失15%的数据
 *                         Q-可以识别已损失25%的数据
 *                         H-可以识别已损失30%的数据
 * @param int $margin 生成的二维码离图片边框的距离
 */
function generateQRfromGoogle($data,$widhtHeight='150',$EC_level='L',$margin='0'){
 $url=urlencode($data);
 echo '<img" width=100% src="http://chart.apis.google.com/chart?chs='.$widhtHeight.'x'.$widhtHeight.'&cht=qr&chld='.$EC_level.'|'.$margin.'&chl='.$data.'" widhtHeight="'.$widhtHeight.'" widhtHeight="'.$widhtHeight.'"/>';
}

调用方法

 代码如下 复制代码

$data='版权所有:http://www.111cn.net/';
generateQRfromGoogle($data);

本文章来给大家介绍关于PHP计算上一个月的今天 今天是星期几的程序演示实例过程,各位有需要了解的朋友可参考。

 上一个月的今天

strtotime 有个小问题

 代码如下 复制代码

> php -r”echo date(‘Ymd000000′,strtotime ( ‘-1 month’, strtotime ( ’201307310000′ ) ));”
20130701000000#
> php -r”echo date(‘Ymd000000′,strtotime ( ‘-1 month’, strtotime ( ’201308010000′ ) ));”
20130701000000#


此时,想起PHP中有一个mktime函数,于是写了如下代码

 代码如下 复制代码


echo date("Y-m-d H:i:s", mktime(date("G", $time), date("i", $time),
date("s", $time), date("n", $time) - 1, date("j", $time), date("Y", $time)));


当执行时,发现结果和strtotime的结果是一样的。

 

搜了一下,下面的方法更准确一些

 代码如下 复制代码

$time = strtotime("2011-03-31");

/**
 * 计算上一个月的今天,如果上个月没有今天,则返回上一个月的最后一天
 * @param type $time
 * @return type
 */
function last_month_today($time){
    $last_month_time = mktime(date("G", $time), date("i", $time),
                date("s", $time), date("n", $time), 0, date("Y", $time));
    $last_month_t =  date("t", $last_month_time);

    if ($last_month_t < date("j", $time)) {
        return date("Y-m-t H:i:s", $last_month_time);
    }

    return date(date("Y-m", $last_month_time) . "-d", $time);
}

echo last_month_today($time);

这里需要注意一点: date(”Y-m”, $last_month_time) . “-d” 这段代码。在写代码的过程中如果写成了 “Y-” . date(”m”, $last_month_time) . “-d” 则在跨年的时间上有问题

今天是星期几

 代码如下 复制代码


<?php echo date('Y-m-d',strtotime('-1 month')); ?>

恩…好像是对的..不过..这个函数有个问题,
如果月份的天数不同,结果就是错的.
加入今天是2012-03-31,计算上个月的今天,那么结果就是2012-03-03;
PHP有个函数 mktime,它可以取得日期的时间戳:
int mktime ([ int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year [, int $is_dst ]]]]]]] )
根据给出的参数返回 Unix 时间戳。时间戳是一个长整数,包含了从 Unix 纪元(January 1 1970 00:00:00 GMT)到给定时间的秒数。

参数可以从右向左省略,任何省略的参数会被设置成本地日期和时间的当前值。
所以可以通过它来计算

 代码如下 复制代码

function last_month_day($time){    
$strtime=mktime(date('h',$time),date('i',$time),date('s',$time),date('m',$time)-1,date('d',$time),date('Y',$time));    

echo date('Y-m-d',$strtime); }  last_month_day(strtotime("2012-03-31"));


输出的结果是2012-03-02;按理说应该是输出2012-02-31????笨蛋2月有31号吗?没,有30号吗,没?有29号吗?..这个..可以有…
PHP给我们处理了这种情况,他会多出几天按下个月来算.
2012年2月最后一天是2012-02-29那么31号比29多两天,所以PHP就累加到下个月来处理 就是2012-03-02啦.
差点忘了..那么星期几怎么算呢??不用算啦..PHP给我们准备好了.
date(‘w’,$strtime);输出的就是一周中的第几天.就是星期几了.

在php中数组排序一直是一个大家论证的话题,下面我来给各位朋友详细介绍关于在php中二维数组排序问题,有需要了解的数组排序的朋友可参考。

根据某个键值对二维数组进行排序是个常见问题,这里总结一个函数,可同时对两个键值分别排序,当然想要更多的话就自行解决吧。


但是如果需要排序的数组是一个二维数组,需要按照数组的键值排序,如下面这个二维数组,需要按照sort键名来排序,那么array_multisort() 就无法直接实现了:


实例一,

 代码如下 复制代码


$arr = array(
array(
'sort' => 3,
'a' => 'a',
'b' => 'b'
),
array(
'sort' => 5,
'a' => 'a',
'b' => 'b'
),
array(
'sort' => 1,
'a' => 'a',
'b' => 'b'
)
);


这样array_multisort()不不能生效了,

我们可以对函数进行升级一下,根据指定键值进行排序

 代码如下 复制代码

function array_sort($arr,$key1,$sort1='asc',$key2='',$sort2='asc'){
    if (!is_array($arr)){
        return $arr;
    }
    foreach($arr AS $key => $row){
        $temp[$key] = $row[$key1];
    }
    $sort1 = $sort1 == 'asc' ? SORT_ASC : SORT_DESC;
    if(!$key2){
        array_multisort($temp, $sort1,$arr);
    } else {
        foreach($arr AS $key => $row){
            $temp2[$key] = $row[$key2];
        }
        $sort2 = $sort2 == 'asc' ? SORT_ASC : SORT_DESC;
        array_multisort($temp, $sort1,$temp2,$sort2,$arr);
    }
    return $arr;
}


实例二

 代码如下 复制代码


function array_sort($arr,$keys,$type='asc'){
 $keysvalue = $new_array = array();
 foreach ($arr as $k=>$v){
  $keysvalue[$k] = $v[$keys];
 }
 if($type == 'asc'){
  asort($keysvalue);
 }else{
  arsort($keysvalue);
 }
 reset($keysvalue);
 foreach ($keysvalue as $k=>$v){
  $new_array[$k] = $arr[$k];
 }
 return $new_array;
}

 

$array = array(
 array('name'=>'手机','brand'=>'诺基亚','price'=>1050),
 array('name'=>'笔记本电脑','brand'=>'lenovo','price'=>4300),
 array('name'=>'剃须刀','brand'=>'飞利浦','price'=>3100),
 array('name'=>'跑步机','brand'=>'三和松石','price'=>4900),
 array('name'=>'手表','brand'=>'卡西欧','price'=>960),
 array('name'=>'液晶电视','brand'=>'索尼','price'=>6299),
 array('name'=>'激光打印机','brand'=>'惠普','price'=>1200)
);

$ShoppingList = array_sort($array,'price');
print_r($ShoppingList);

面是对$array这个二维数组按照'price'从低到高的排序。

标签:[!--infotagslink--]

您可能感兴趣的文章: