php压缩无限循环

php压缩无限循环,php,zip,Php,Zip,当使用php zip类提取zip文件时(事实上这很糟糕,但谁知道呢?) $unzip-t1.zip 文件#47:错误的zipfile偏移(本地头信号):574665 ... 在1.zip中至少检测到一个错误。 其他方式: 您可以对照zip文件头中的长度检查zip文件的长度,但这可能无助于检测损坏的文件。您需要为zip计算CRC,并将其与原始CRC进行比较,以确定是否正确。 但是,您可能无法使用原始CRC 如果是在本地系统中执行此操作,则可以使用PHP函数并传递参数来直接使用解压可执行文件 其他方

当使用php zip类提取zip文件时(事实上这很糟糕,但谁知道呢?)

$unzip-t1.zip
文件#47:错误的zipfile偏移(本地头信号):574665
...
在1.zip中至少检测到一个错误。
其他方式

  • 您可以对照zip文件头中的长度检查zip文件的长度,但这可能无助于检测损坏的文件。您需要为zip计算CRC,并将其与原始CRC进行比较,以确定是否正确。 但是,您可能无法使用原始CRC

  • 如果是在本地系统中执行此操作,则可以使用PHP函数并传递参数来直接使用解压可执行文件

  • 其他方式

  • 您可以对照zip文件头中的长度检查zip文件的长度,但这可能无助于检测损坏的文件。您需要为zip计算CRC,并将其与原始CRC进行比较,以确定是否正确。 但是,您可能无法使用原始CRC

  • 如果是在本地系统中执行此操作,则可以使用PHP函数并传递参数来直接使用解压可执行文件

  • 好的,它是有效的。但我认为提取zip不是一个好的解决方案,不管文件数据是否经过验证


    好的,它是有效的。但我认为提取zip不是一个好的解决方案,无论文件数据是否经过验证。

    出于安全原因,请保持系统库的更新。那你就没事了。请与系统管理员联系,了解您的选项。出于安全原因,请随时更新系统库。那你就没事了。请与您的系统管理员联系,了解您的选项。是的,可能是在使用zip函数/类之前,我必须使用exec函数检查zip文件。PHP检查方法有效。exec方法只是作为一种替代方法。如果PHP zipValid方法失败,您可以使用它。是的,可能是在使用zip函数/类之前,我必须使用exec函数检查zip文件。检查的PHP方法有效。exec方法只是作为一种替代方法。如果PHP zipValid方法失败,您可以使用它。
      $ unzip -t 1.zip 
        file #47:  bad zipfile offset (local header sig):  574665
        ...
        At least one error was detected in 1.zip.
    
        <?php
        function unzip($apkpath, $dirname) { //
            $zip = new ZipArchive;
            $res = $zip->open($apkpath);
            if ($res === TRUE) {
                $zip->extractTo($dirname);
                $zip->close();
                return true;
            } else {
                return false;
            }
        }
        unzip('com.nd.sms.zip', '2');  // It's ok
        //unzip('1.zip', '2');            //this line go into infinite loop and very heigh cpu
        unzip('com.nd.sms.zip', '2');
        ?>
    
    function zipValid($path) {
      $zip = zip_open($path);
      if (is_resource($zip)) {
        // valid zip
        zip_close($zip);
        return true;
      }
    else 
    return false;
    
    function unzip($apkpath, $dirname) {
        exec('unzip -t '.$apkpath.'>/dev/null 2>&1', $out, $return);
        if($return === 0)
        {
            $zip = new ZipArchive;
            $res = $zip->open($apkpath);
            if ($res === TRUE) {
                $zip->extractTo($dirname);
                $zip->close();
                return true;
            } else {
                return false;
            }
        }
        return false;
    }