RarEntry::getCrc
(PECL rar >= 0.1)
RarEntry::getCrc — Get 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. |
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для сжатия и архивации
- Архивирование Rar
- Функция RarEntry::extract() - Извлекает элемент из архива
- Функция RarEntry::getAttr() - Возвращает атрибуты элемента архива
- Функция RarEntry::getCrc() - Возвращает CRC элемента архива
- Функция RarEntry::getFileTime() - Возвращает последнее время изменения элемента
- Функция RarEntry::getHostOs() - Возвращает оригинальную ОС элемента
- Функция RarEntry::getMethod() - Возвращает метод компрессии элемента
- Функция RarEntry::getName() - Возвращает имя элемента
- Функция RarEntry::getPackedSize() - Возвращает размер сжатого элемента
- Функция RarEntry::getStream() - Get file handler for entry
- Функция RarEntry::getUnpackedSize() - Возвращает размер элемента в распакованном состоянии
- Функция RarEntry::getVersion() - Возвращает минимальную версию программы RAR, необходимую для распаковки элемента
- Функция RarEntry::isDirectory() - Test whether an entry represents a directory
- Функция RarEntry::isEncrypted() - Test whether an entry is encrypted
- Функция RarEntry::__toString() - Get text representation of entry
Коментарии
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);
}
?>