• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • RarEntry::getCrc()

    (PECL rar >= 0.1)

    Get CRC of the entry

    说明

    publicRarEntry::getCrc(void): string

    Returns an hexadecimal string representation of the CRC of the archive entry.

    参数

    此函数没有参数。

    返回值

    Returns the CRC of the archive entry or FALSE on error.

    更新日志

    版本说明
    2.0.0 This method now returns correct values for multiple volume archives.
    RarEntry::getCrc() returs a lowercase hex-string (e.g. 'bf6fa85c') the same as hash_... functions, using the same polynomial as 'crc32b' algorithm.
    So, it can be used to check CRC after a stream unpacking:
    <?php
     $archive_name = 'archive.rar';
     $entry_name = 'someentry.ext';
     $rar = RarArchive::open($archive_name) or die("Cannot open archive $archive_name");
     if ($rar->isBroken()) {
      die("The archive is broken!");
     }
     $entry = $rar->getEntry($entry_name) or die("Cannot find entry $entry_name");
     $stream = $entry->getStream() or die("Cannot open stream");
     $crc = hash_init('crc32b'); // Initializing the hash function
     while (!feof($stream)) {
      $s = fread($stream, 8192);
      if ($s === false) {
        // Error reading (do not use fread(...) or die(...), because fread can return '0'!)
       die('Error reading the compressed file.');
      }
      hash_update($crc, $s); // updating the hash
      // ...
      // Do whatever with the $s
     }
     fclose($stream);
     $got_crc = hash_final($crc);
     $need_crc = $entry->getCrc();
     print("Got CRC: $got_crc" . PHP_EOL);
     print("Need CRC: $need_crc" . PHP_EOL);
     if ($got_crc != $need_crc) {
      // rollback
      print("Sorry guys, the file was incorrect!" . PHP_EOL);
     } else {
      print("Everything is ok" . PHP_EOL);
     }
    ?>