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);

?>

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