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

本文介绍了一种解决因字符编码不同导致文件读取错误的方法,通过使用file_get_contents函数替代file函数,确保了文件内容的正确读取。并详细展示了如何从特定位置读取固定长度的数据,以及如何处理和比较这些数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

所以倒腾了很久,最后发现因为字符的编码的原因,每行的大小都是不一样的,所以读取的内容是不能计算在哪一行的。所以不能用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;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值