PHP写入二进制格式文件的代码


PHP #二进制2014-04-15 22:58

给大家分享一段用PHP写入二进制格式文件的代码。

<?php
    /*
        二进制文件格式如下
        +-----------------------------------------------------+
        |总记录数(4B)|空白(7B)--------------------------------|
        |开始ip(4B) |结束ip(4B) |省id(1B)|市id(1B)|ispid(1B)|
        |开始ip(4B) |结束ip(4B) |省id(1B)|市id(1B)|ispid(1B)|
        |开始ip(4B) |结束ip(4B) |省id(1B)|市id(1B)|ispid(1B)|
        +-----------------------------------------------------+
    */
    //要写如的文件
 
    $filename="a.dat";
    //wb表示用二进制重新写文件
    $fp=fopen($filename,'wb')or die("cannot open a.dat");
    //原始数据:开始ip,结束ip,省id,市id,isp的id
    $records=array(
                      array(
                              '110.25.23.1', //开始ip
                              '110.25.23.254', //结束ip
                              3, //省id
                              1, //市id
                              6 //isp的id
                           ),
                      array(
                              '210.200.10.1',
                              '210.254.23.254',
                              1,
                              1,
                              2
                           ),
                     array(
                              '211.68.154.1',
                              '211.254.47.254',
                              2,
                              2,
                              2
                           ),
                                        array(
                              '222.22.45.1',
                              '254.255.255.255',
                              3,
                              3,
                              3
                           ),
                      array(
                              '255.255.255.255',
                              '255.255.255.255',
                              0,
                              0,
                              0
                           )
                  );
    //计算记录总数
    $total=count($records);
    //用4个字节记录记录总数
    $inputstr=sprintf("%08x",$total);
    echo "$inputstr";
    //用4个字节记录记录总数,写入文件
    $str=pack ("H8",$inputstr);
    fwrite($fp,$str);
     //补充7个字节的空白
    $str=pack ("a7","");
    fwrite($fp,$str);
    foreach($records as $item)
    {
        //用4个字节记录开始ip
        $inputstr=sprintf("%x",ip2long($item[0]));
        $str=pack ("H8",$inputstr);
        fwrite($fp,$str);
        
            //用4个字节记录结束ip
        $inputstr=sprintf("%x",ip2long($item[1]));
        $str=pack ("H8",$inputstr);
        fwrite($fp,$str);
        
        //用1个字节记录省id
        $inputstr=sprintf("%02x",$item[2]);
        $str=pack ("H2",$inputstr);
        fwrite($fp,$str);
        
        //用1个字节记录市id
        $inputstr=sprintf("%02x",$item[3]);
        $str=pack ("H2",$inputstr);
        fwrite($fp,$str);
        
        //用1个字节记录ispid  http://yige.org/
        $inputstr=sprintf("%02x",$item[4]);
        $str=pack ("H2",$inputstr);
        fwrite($fp,$str);
    }
    fclose($fp);


相关文章

粤ICP备11097351号-1