W3docs

zip_entry_open()

Функция zip_entry_open() в PHP открывает запись в zip-архиве для чтения. Устарела в PHP 7.4 и удалена в PHP 8.0.

⚠️ Уведомление об устаревании: Функция zip_entry_open() относится к устаревшему расширению zip, которое было объявлено устаревшим в PHP 7.4 и удалено в PHP 8.0. Приведённые ниже примеры носят исключительно исторический характер. В современных PHP-приложениях используйте класс ZipArchive.

zip_entry_open() подготавливает отдельную запись (файл) внутри открытого zip-архива, чтобы её содержимое можно было прочитать. Функция работает в связке с zip_open(), zip_read() и zip_entry_read(): вы открываете архив, переходите к записи, открываете её, а затем читаете из неё. Без предварительного вызова zip_entry_open() функция zip_entry_read() не сможет ничего прочитать.

На этой странице описаны сигнатура функции, её параметры и возвращаемое значение, полный пример чтения записи, а также — что важнее всего — современная замена ZipArchive, которую следует использовать сегодня.

Синтаксис

resource zip_entry_open(resource $zip, resource $zip_entry, string $mode = "r")

Параметры

ПараметрОписание
$zipДескриптор архива, возвращённый функцией zip_open().
$zip_entryДескриптор записи, возвращённый функцией zip_read().
$modeРежим доступа. Устаревшее расширение zip поддерживало только чтение, поэтому на практике всегда используется значение "r".

Четвёртый аргумент $password, встречающийся в некоторых старых документациях, никогда не работал в поставляемом расширении zip и игнорировался.

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

Возвращает true в случае успеха или false в случае ошибки. Несмотря на историческую подсказку типа resource, новый дескриптор не возвращается — вы по-прежнему передаёте тот же дескриптор $zip_entry в zip_entry_read().

Пример использования

Пример: чтение файла из zip-архива

Откройте архив, перейдите к записи, откройте её, прочитайте и освободите ресурсы:

$zip = zip_open("example.zip");

if (is_resource($zip)) {
    while ($zip_entry = zip_read($zip)) {
        // Prepare this entry for reading
        if (zip_entry_open($zip, $zip_entry, "r")) {
            $name     = zip_entry_name($zip_entry);
            $contents = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));

            echo "$name: $contents\n";

            zip_entry_close($zip_entry);
        }
    }
    zip_close($zip);
}

Здесь zip_open() открывает архив, zip_read() переходит к каждой записи поочерёдно, zip_entry_open() делает текущую запись доступной для чтения, а zip_entry_read() возвращает её байты. Всегда сопровождайте каждое успешное открытие вызовом zip_entry_close(), а по окончании работы закрывайте архив с помощью zip_close().

Современная альтернатива: класс ZipArchive

Чтобы получить тот же результат в PHP 8.0+, используйте встроенный класс ZipArchive:

$zip = new ZipArchive;

if ($zip->open('example.zip') === true) {
    // Loop over every entry by index
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $name     = $zip->getNameIndex($i);
        $contents = $zip->getFromIndex($i);

        echo "$name: $contents\n";
    }
    $zip->close();
}

Классу ZipArchive не нужен отдельный шаг «открыть запись»: getFromIndex() (или getFromName()) читает содержимое записи напрямую и работает во всех современных версиях PHP.

Заключение

В этой статье мы рассмотрели функцию PHP zip_entry_open() и способы её применения для открытия файла в zip-архиве. Мы объяснили, что делает функция, разобрали её синтаксис и привели пример практического использования. Обратите внимание, что zip_entry_open() признана устаревшей и удалена в PHP 8.0; для современных проектов используйте класс ZipArchive, чтобы открывать и читать файлы в zip-архиве.

Практика

Практика
Что делает функция ZipEntry::open() в PHP?
Что делает функция ZipEntry::open() в PHP?
Was this page helpful?