读取zip文件中的.upg文件以及.bin文件

这次收到一个任务跟之前一样,但是这次的复杂在于两个文件不一样!

所以倒腾了很久,最后发现因为字符的编码的原因,每行的大小都是不一样的,所以读取的内容是不能计算在哪一行的。所以不能用file函数,因为这个函数是读取一行内容作为数组的一个元素存在的。

 

所以这里使用file_get_contents函数,因为这个函数是将文件的内容都作为一个字符串存在。

function readVersion($path){

    //读取文件

    $route = "temp";

    $name = explode(".",$path);

    $name = $name[0];

    $upg = $route."/".$name.".upg";

    $bin = $route."/".$name.".bin";

    $zip = new ZipArchive();

    if ($zip->open($path) === true){

        $unpack =  $zip->extractTo($route);

        $zip->close();

        if ($unpack){

            //解压成功读取文件

                $upg_con = getBytes($upg,13,32);

                $bin_con = getBytes($bin,6*1024+4,32);

                echo "upg:".$upg_con."\n";

                echo "bin:".$bin_con;

            //删除临时文件夹temp

            if (file_exists($bin)){

                if (unlink($bin) && unlink($upg)){

                    rmdir($route);

                }

            }

        }

        //返回数据

        if ($upg_con == $bin_con){

            return $upg_con;

        }else{

           return "";

        }

    }

}

function getBytes($file,$start,$offset){

    $str = "";

    $arr = [];

    $ass = "";

    if (file_exists($file)){

        $content = file_get_contents($file);

    }

    //转换成16进制

    for ($i = 0;$i < strlen($content); $i++){

        $temp = substr($content,$i,1);

        $str .= bin2hex($temp);

    }

    $result = substr($str,$start*2,$offset*2);

    for ($i = 0;$i < strlen($result); $i+=2){

        $temp = substr($result,$i,2);

        if ($temp == "00"){

            break;

        }

        array_push($arr,$temp);

    }

    for ($i = 0;$i<sizeof($arr);$i++){

        $temp = "0x".$arr[$i];

        $ass = "".$ass.chr($temp);

    }

    return $ass;

}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值