RarEntry::getCrc()
(PECL rar >= 0.1)
Get CRC of the entry
说明
public RarEntry::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); } ?>