RarEntry::getCrc

(PECL rar >= 0.1)

RarEntry::getCrcGet CRC of the entry

Description

public string RarEntry::getCrc ( void )

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

Parameters

This function has no parameters.

Return Values

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

Changelog

Version Description
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($stream8192);
    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_crcPHP_EOL);
  print(
"Need CRC: $need_crcPHP_EOL);

  if (
$got_crc != $need_crc) {
   
// rollback
   
print("Sorry guys, the file was incorrect!" PHP_EOL);
  } else {
    print(
"Everything is ok" PHP_EOL);
  }
?>
2018-09-19 19:00:03
http://php5.kiev.ua/manual/ru/rarentry.getcrc.html

    Поддержать сайт на родительском проекте КГБ