用于检测rar文件完成(* .r01)的PHP函数不能与* .s01一起使用

问题描述 投票:-1回答:1

我有一个php函数来检测多个rar文件的完成情况。我的问题是,当使用旧样式rar时,例如:

archive.rar
archive.r01
archive.r02
archive.r03
......
archive.r99

限制为archive.r99,然后转到:

archive.s01
archive.s02
archive.s03

我对源代码无能为力。而且我也不知道如何调整此功能。我尝试过||在strpos中:if (strpos($b[0], '.r') > - 1 || strpos($b[0], '.s') > - 1 ) {

但是那不起作用。它没有检测到s01,并一直说存档/丢失文件s01,s02,s03等不完整...

这里是功能:

private function detectMissingFiles($array) {
    $typ = 0;
    $tid = $t["id"];
    $breaked = false;
    $arr = array();
    foreach($array as $b) {
        if (stripos($b[0], 'disc') > - 1) {
            return false;
        }

        if (strpos($b[0], '/') > - 1) {
            continue;
        }

        if ($typ == 0) {
            if (strpos($b[0], '.part0') > - 1) {
                $typ = 2;
            }
            else
            if (strpos($b[0], '.r') > - 1) {
                $typ = 1;
            }
            else {
                continue;
            }
        }

        if ($typ == 1) {
            if (is_numeric($s = substr($b[0], -2))) {
                $arr[] = array(
                    id => $s,
                    s => $b[1]
                );
            }
        }
        else
        if ($typ == 2) {
            if (is_numeric($s = substr($b[0], -6, 2)) && substr($b[0], -4) == '.rar') {
                $arr[] = array(
                    id => $s,
                    s => $b[1]
                );
            }
        }
    }

    asort($arr);
    if ($typ == 1) $sista = - 1;
    else
    if ($typ == 2) $sista = 0;
    $status = "";
    $antal = count($arr) - 1;
    if ($antal > 30) {
        foreach($arr as $ar) {
            if ($antal > $ar["id"]) {
                if ($ar["s"] < 50000000) {
                    $status.= L::get("WRONG_RAR_FILE_SIZE", [$ar["id"]]);
                }
            }

            if ($sista + 1 != $ar["id"]) {
                $status.= L::get("MISSING_FILE", [$sista + 1]);
            }

            $sista = $ar["id"];
        }

        if (strlen($status) > 1 && strlen($status) < 200) return $status;
        else return 0;
    }
}

我希望有人能在这里启发我。预先谢谢!

php function rar
1个回答
0
投票

我最好的猜测是“旧样式rar”名称算法如下:

function rar_int_to_string(int $i):string{
    $c="r";
    while($i>99){
        ++$c;
        $i-=99;
    }
    if($i<10){
        $c=$c."0";
    }
    return $c.$i;
}

产生

r01> r02> r03> r04> r05> r06> r07> r08> r09> r10> r11> r12> r13> r14> r15> r16> r17> r18> r19> r20> r21> r22> r23> r24> r25> r26> r27> r28> r29> r30> r31> r32> r33> r34> r35> r36> r37> r38> r39> r40> r41> r42> r43> r44> r45> r46> r47> r48> r49> r50> r51> r52> r53> r54> r55> r56> r57> r58> r59> r60> r61> r62> r63> r64> r65> r66> r67> r68> r69> r70> r71> r72> r73> r74> r75> r76> r77> r78> r79> r80> r81> r82> r83> r84> r85> r86> r87> r88> r89> r90> r91> r92> r93> r94> r95> r96> r97> r98> r99> s01> s02> s03> s04> s05> s06> s07> s08> s09> s10> s11> s12> s13> s14> s15> s16> s17> s18> s18> s19> s20> s21> s22> s23> s24> s25> s26> s27> s28> s29> s30> s31> s32> s33> s34> s35> s36> s37> s38> s39> s40> s41> s42> s43> s44> s45> s46> s47> s48> s49> s50> s51> s52> s53> s54> s55> s56> s57> s58> s59> s60> s61> s62> s63> s64> s65> s66> s67> s68> s69> s70> s71> s72> s73> s74> s75> s76> s77> s78> s79> s80> s81> s82> s83> s84> s85> s86> s87> s88> s89> s90> s91> s92> s93> s94> s95> s96> s97> s98> s99> t01> t02> t03> t04> t05> t06> t07> t08> t09> t10> t11> t12> t13> t14> t15> t16> t17> t18> t19> t20> t21> t22> t23> t24> t25> t26> t27> t28> t29> t30> t31> t32> t33> t34> t35> t36> t37> t38> t39> t40> t41> t42> t43> t44> t45> t46> t47> t48> t49> t50> t51> 5天2> t53> t54> t55> t56> t57> t58> t59> t60> t61> t62> t63> t64> t65> t66> t67> t68> t69> t70> t71> t72> t73> t74> t75> t76> t77> t78> t79> t80> t81> t82> t83> t84> t85> t86> t87> t88> t89> t90> t91> t92> t93> t94> t95> t96> t97> t98> t99> u01> u02> u03> u04> u05> u06> u07> u08> u09> u10> u11> u12> u13> u14> u15> u16> u17> u18> u19> u20> u21> u22> u23> u24> u25> u26> u27> u28> u29> u30> u31> u32> u33> u34> u35> u36> u37> u38> u39> u40> u41> u42> u43> u44> u45> u46> u47> u48> u49> u50> u51> u52> u53> u54> u55> u56> u57> u58> u59> u60> u61> u62> u63> u64> u65> u66> u67> u68> u69> u70> u71> u72> u73> u74> u75> u76> u77> u78> u79> u80> u81> u82> u83> u84> u85> u86> u87> u88> u89> u90> u91> u92> u93> u94> u95> u96> u97> u98> u99> v01> v02> v03> v04> v05> v06> v07> v08> v09> v10> v11> v12> v13> v14> v15> v16> v17> v18> v19> v20> v21> v22> v23> v24> v25> v26> v27> v28> v29> v30> v31> v32> v33> v34> v35> v36> v37> v38> v39> v40> v41> v42> v43> v44> v45> v46> v47> v48> v49> v50> v51> v52> v53> v54> v55> v56> v57> v58> v59> v60> v61> v62> v63> v64> v65> v66> v67> v68> v69> v70> v71> v72> v73> v74> v75> v76> v77> v78> v79> v80> v81> v82> v83> v84> v85> v86> v87> v88> v89> v90> v91> v92> v93> v94> v95> v96> v97> v98> v99> w01> w02> w03> w04> 00 5> w06> w07> w08> w09> w10> w11> w12> w13> w14> w15> w16> w17> w18> w19> w20> w21> w22> w23> w24> w25> w26> w27> w28> w29> w30> w31> w32> w33> w34> w35> w36> w37> w38> w39> w40> w41> w42> w43> w44> w45> w46> w47> w48> w49> w50> w51> w52> w53> w54> w55> w56> w57> w58> w59> w60> w61> w62> w63> w64> w65> w66> w67> w68> w69> w70> w71> w72> w73> w74> w75> w76> w77> w78> w79> w80> w81> w82> w83> w84> w85> w86> w87> w88> w89> w90> w91> w92> w93> w94> w95> w96> w97> w98> w99> x01> x02> x03> x04> x05> x06> x07> x08> x09> x10> x11> x12> x13> x14> x15> x16> x17> x18> x19> x20> x21> x22> x23> x24> x25> x26> x27> x28> x29> x30> x31> x32> x33> x34> x35> x36> x37> x38> x39> x40> x41> x42> x43> x44> x45> x46> x47> x48> x49> x50> x51> x52> x53> x54> x55> x56> x57> x58> x59> x60> x61> x62> x63> x64> x65> x66> x67> x68> x69> x70> x71> x72> x73> x74> x75> x76> x77> x78> x79> x80> x81> x82> x83> x84> x85> x86> x87> x88> x89> x90> x91> x92> x93> x94> x95> x96> x97> x98> x99> y99> y01> y02> y03> y04> y05> y06> y07> y08> y09> y10> y11> y12> y13> y14> y15> y16> y17> y18> y19> y20> y21> y22> y23> y24> y25> y26> y27> y28> y29> y30> y31> y32> y33> y34> y35> y36> y37> y38> y39> y40> y41> y42> y43> y44> y45> y46> y47> y48> y49> y50> y51> y52> y53> y54> y55> y56> 55 7> y58> y59> y60> y61> y62> y63> y64> y65> y66> y67> y68> y69> y70> y71> y72> y73> y74> y75> y76> y77> y78> y79> y80> y81> y82> y83> y84> y85> y86> y87> y88> y89> y90> y91> y92> y93> y94> y95> y96> y97> y98> y99> z01> z02> z03> z04> z05> z06> z07> z08> z09> z10> z11> z12> z13> z14> z15> z16> z17> z18> z19> z20> z21> z22> z23> z24> z25> z26> z27> z28> z29> z30> z31> z32> z33> z34> z35> z36> z37> z38> z39> z40> z41> z42> z43> z44> z45> z46> z47> z48> z49> z50> z51> z52> z53> z54> z55> z56> z57> z58> z59> z60> z61> z62> z63> z64> z65> z66> z67> z68> z69> z70> z71> z72> z73> z74> z75> z76> z77> z78> z79> z80> z81> z82> z83> z84> z85> z86> z87> z88> z89> z90> z91> z92> z93> z94> z95> z96> z97> z98> z99> aa01> aa02> aa03> aa04> aa05> aa06> aa07> aa08> aa09> aa10> aa11> aa12> aa13> aa14> aa15> aa16> aa17> aa18> aa19> aa20> aa21> aa22> aa23> aa24> aa25> aa26> aa27> aa28> aa29> aa30> aa31> aa32> aa33> aa34> aa35> aa36> aa37> aa38> aa39> aa40> aa41> aa42> aa43> aa44> aa45> aa46> aa47> aa48> aa49> aa50> aa51> aa52> aa53> aa54> aa55> aa56> aa57> aa58> aa59> aa60> aa61> aa62> aa63> aa64> aa65> aa66> aa67> aa68> aa69> aa70> aa71> aa72> aa73> aa74> aa75> aa76> aa77> aa78> aa79> aa80> aa81> aa82> aa83> aa84> aa85> aa86> aa87 > aa88> aa89> aa90> aa91> aa92> aa93> aa94> aa95> aa96> aa97> aa98> aa99> ab01> ab02> ab03> ab04> ab05> ab06> ab07> ab08> ab08-> ab09

以此类推,“ ab09”表示“文件块#999”

© www.soinside.com 2019 - 2024. All rights reserved.