W3docs

zip_entry_close()

Функция zip_entry_close() закрывает дескриптор zip_entry в PHP. Устарела в 7.4 и удалена в PHP 8.0.

⚠️ Устарело и удалено: Функции zip_* (включая zip_entry_close()) были объявлены устаревшими в PHP 7.4 и удалены в PHP 8.0. Этот материал сохранён только для справки по устаревшему коду. Для современного PHP используйте класс ZipArchive.

Функция zip_entry_close() была встроенной функцией PHP, используемой для закрытия дескриптора zip_entry. Когда вы заканчиваете работу с файлом в zip-архиве, следует закрыть дескриптор с помощью zip_entry_close(), чтобы освободить связанный ресурс. (Примечание: устаревшее расширение zip было преимущественно предназначено только для чтения, поэтому закрытие дескриптора не сохраняет изменения в архиве.)

Синтаксис

Синтаксис функции zip_entry_close() выглядит следующим образом:

Синтаксис функции zip_entry_close() в PHP

void zip_entry_close(resource $zip_entry)

Где $zip_entry — дескриптор zip_entry, возвращаемый функцией zip_read(). (Примечание: указание типа resource является устаревшим; эта функция больше не существует в PHP 8.0+.)

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

Рассмотрим практический пример использования zip_entry_close() в PHP.

Пример: Закрытие дескриптора записи Zip

Предположим, вы открыли zip-архив с помощью функций PHP для работы с zip и извлекли содержимое файла с помощью zip_entry_read(). После завершения работы следует закрыть дескриптор zip_entry с помощью zip_entry_close(), как показано ниже:

Закрытие дескриптора записи Zip в PHP

$zip = zip_open("example.zip");
if ($zip !== false) {
    $zip_entry = zip_read($zip);
    if ($zip_entry !== false) {
        // do something with the contents of the zip entry
        zip_entry_close($zip_entry);
    }
    zip_close($zip);
}

Этот код открывает файл zip-архива example.zip с помощью zip_open(), читает первую запись с помощью zip_read(), и (в реальной программе) открыл бы её через zip_entry_open() и прочитал через zip_entry_read(). По завершении zip_entry_close() закрывает дескриптор zip_entry и освобождает ресурс, а затем zip_close() закрывает сам архив.

Перебор всех записей в цикле

На практике вы редко закрываете отдельную запись вручную. zip_read() возвращает следующую запись при каждом вызове и false, когда записей больше нет, поэтому цикл while закрывает каждый дескриптор по ходу выполнения:

$zip = zip_open("example.zip");
if (is_resource($zip)) {
    while ($entry = zip_read($zip)) {
        zip_entry_open($zip, $entry);
        // process the entry, e.g. zip_entry_read($entry, zip_entry_filesize($entry));
        zip_entry_close($entry);   // free this entry before moving on
    }
    zip_close($zip);
}

Миграция на ZipArchive

Поскольку семейство функций zip_* больше не существует в PHP 8.0+, приведённый выше пример вызовет ошибку Call to undefined function в современном интерпретаторе. Класс ZipArchive является рекомендуемой заменой. Он не требует закрытия отдельных записей — вы читаете запись по имени и вызываете close() для всего архива:

<?php
$zip = new ZipArchive();
if ($zip->open("example.zip") === true) {
    // read a file directly by its name inside the archive
    $contents = $zip->getFromName("readme.txt");
    echo $contents;
    $zip->close();   // closes the archive; no per-entry close needed
}

ZipArchive::close() заменяет как zip_entry_close(), так и zip_close(), и в отличие от устаревшего расширения только для чтения, также фиксирует любые изменения, внесённые с помощью addFile() или addFromString().

Заключение

В этой статье мы рассмотрели устаревшую функцию zip_entry_close(), её синтаксис и то, как она вписывается в рабочий процесс zip_open()zip_read()zip_entry_close()zip_close(). Как уже отмечалось, эти функции были удалены в PHP 8.0. Для разработки на современном PHP переходите на класс ZipArchive, который предоставляет надёжный объектно-ориентированный API для создания, чтения и изменения ZIP-архивов без управления дескрипторами отдельных записей.

Практика

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