RarEntry::getCrc
(PECL rar >= 0.1)
RarEntry::getCrc — Возвращает CRC элемента архива
Описание
public string RarEntry::getCrc
( void
)
Возвращает шестнадцатеричное строковое представление CRC элемента архива.
Список параметров
У этой функции нет параметров.
Возвращаемые значения
Возвращает CRC элемента архива или FALSE
в случае ошибки.
Список изменений
Версия | Описание |
---|---|
2.0.0 | Теперь этот метод возвращает корректные значения для многотомных архивов. |
- 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);
}
?>