CakeFest 2024: The Official CakePHP Conference

RarEntry::extract

(PECL rar >= 0.1)

RarEntry::extractИзвлекает элемент из архива

Описание

public RarEntry::extract(
    string $dir,
    string $filepath = "",
    string $password = NULL,
    bool $extended_data = false
): bool

RarEntry::extract() извлекает содержимое элемента. При этом создаётся новый файл в указанной директории dir с именем совпадающим с именем элемента, если только не задан второй аргумент. Смотрите подробнее ниже.

Список параметров

dir

Путь к директории, куда необходимо извлечь файлы. Этот параметр учитывается только если не указан параметр filepath. Если оба параметра не указаны, то файлы извлекаются в текущую директорию.

filepath

Путь (полный или относительный) содержит директорию и имя извлекаемого файла. Этот параметр переопределяет и параметр dir и оригинальное имя файла.

password

Пароль используется для расшифровки текущего элемента. Если элемент не зашифрован, то этот параметр не будет использован и его можно не указывать. Если же этот параметр не указан, а элемент зашифрован, то будет использован пароль, переданный функции rar_open(), если её вызывали. Если передан неверный пароль, явно или неявно через rar_open(), то проверка CRC будет неудачной и будет возвращён false. Вы можете проверить является ли элемент зашифрованным с помощью RarEntry::isEncrypted().

extended_data

Если true, то в извлекаемый файл будет добавлена дополнительная информация, такая как NTFS ACL и владелец в системе Unix, если они присутствовали в архиве.

Внимание

До версии 2.0.0, не обрабатывала относительные пути корректно. Используйте для этой ситуации realpath().

Возвращаемые значения

Возвращает true в случае успешного выполнения или false, если возникла ошибка.

Список изменений

Версия Описание
PECL rar 3.0.0 Был добавлен параметр extended_data.
PECL rar 3.0.0 Исправлена поддержка RAR архивов с повторяющимися именами элементов.

Примеры

Пример #1 Пример использования RarEntry::extract()

<?php

$rar_file
= rar_open('example.rar') or die("Не удалось открыть Rar архив");

$entry = rar_entry_get($rar_file, 'Dir/file.txt') or die("Не удалось найти такую запись");

$entry->extract('/dir/to'); // создание /dir/to/Dir/file.txt
$entry->extract(false, '/dir/to/new_name.txt'); // создание /dir/to/new_name.txt

?>

Пример #2 Как извлечь все файлы из архива:

<?php

/* Пример от Erik Jenssen aka erix */

$filename = "foobar.rar";
$filepath = "/home/foo/bar/";

$rar_file = rar_open($filepath.$filename);
$list = rar_list($rar_file);
foreach(
$list as $file) {
$entry = rar_entry_get($rar_file, $file);
$entry->extract("."); // извлечь в текущий каталог
}
rar_close($rar_file);

?>

Смотрите также

add a note

User Contributed Notes 2 notes

up
7
nelson_km_94 at hotmail dot com
9 years ago
Example #2 has a mistake.

This one works fine:
<?php

/* example by Erik Jenssen aka erix */

$filename = "foobar.rar";
$filepath = "/home/foo/bar/";

$rar_file = rar_open($filepath.$filename);
$list = rar_list($rar_file);
foreach(
$list as $file) {
$entry = rar_entry_get($rar_file, $file->getName());
$entry->extract("."); // extract to the current dir
}
rar_close($rar_file);

?>
up
0
Anonymous
10 years ago
If the entry to extract is a directory as per RarEntry::isDirectory(), this method does not seem to extract the entries below that directory as one might expect from using the command-line RAR or WinRAR.
To Top