PHP写入二进制格式文件的代码
PHP
#二进制2014-04-15 22:58
给大家分享一段用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);
相关文章