W3docs

zip_open()

Функция zip_open() в PHP открывала zip-архив и возвращала ресурс. Удалена в PHP 8.0; используйте ZipArchive.

Примечание: zip_open() была объявлена устаревшей в PHP 7.1 и удалена в PHP 8.0. Эта функция предоставляется только для обратной совместимости. В современных приложениях на PHP используйте класс ZipArchive.

Функция zip_open() — встроенная функция PHP, которая применялась для открытия файла zip-архива. Функция возвращает ресурс zip-архива, который можно использовать для чтения и управления содержимым архива.

Синтаксис

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

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

resource zip_open(string $filename [, int $flags [, string &$error ]])

Где:

  • $filename — путь к файлу zip-архива, который необходимо открыть.
  • $flags — необязательное целочисленное значение флагов, изменяющих способ открытия архива. На практике этот параметр редко используется и обычно передаётся как 0.
  • $error — необязательная переменная-ссылка. При неудачном открытии PHP устанавливает её в числовой код ошибки, чтобы можно было узнать причину сбоя.

В случае успеха функция возвращает ресурс zip-архива (непрозрачный дескриптор). В случае неудачи возвращает либо false, либо, в некоторых сборках, целочисленный код ошибки — поэтому всегда проверяйте результат перед использованием.

Почему функция была удалена?

zip_open() относится к старому процедурному Zip API (zip_open(), zip_read(), zip_close() и вспомогательные функции zip_entry_*()). Этот API был объявлен устаревшим в PHP 7.1 и полностью удалён в PHP 8.0. Замена — объектно-ориентированный класс ZipArchive, который работает быстрее, может как читать, так и записывать архивы и поддерживается по сей день.

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

Сравним устаревший подход с современным, который следует использовать.

Пример: открытие zip-архива (устаревший API)

Предположим, у вас есть файл zip-архива example.zip и вы хотите его открыть. При использовании старого API нужно вызвать zip_open() и проверить результат:

Открытие файла zip-архива в PHP (только PHP < 8.0)

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

// On failure the function returns an integer error code instead of a resource.
if (is_resource($zip)) {
    echo "Archive opened successfully.";
    zip_close($zip);
} else {
    echo "Failed to open archive. Error code: " . $zip;
}

Этот код пытается открыть example.zip. Поскольку функция возвращает ресурс в случае успеха и целочисленный код ошибки в случае неудачи, наиболее безопасная проверка — is_resource(). Для чтения или извлечения записей необходимы сопутствующие функции zip_read(), zip_entry_open() и zip_entry_read() — все они также были удалены в PHP 8.0.

Пример: современный эквивалент с ZipArchive

В любой поддерживаемой версии PHP (7.x и 8.x) выполните то же самое с помощью класса ZipArchive. Метод ZipArchive::open() возвращает true в случае успеха или код ошибки в случае неудачи:

Открытие и чтение zip-архива с помощью ZipArchive

$zip = new ZipArchive();

if ($zip->open("example.zip") === true) {
    echo "Archive opened. It contains {$zip->numFiles} file(s).\n";

    // Read the first entry's name as an example.
    if ($zip->numFiles > 0) {
        echo "First entry: " . $zip->getNameIndex(0) . "\n";
    }

    $zip->close();
} else {
    echo "Failed to open archive.\n";
}

ZipArchive объединяет шаги открытия, проверки и закрытия в одном хорошо документированном объекте. В отличие от устаревшего API, он также позволяет создавать и изменять архивы с помощью addFile() и addFromString().

Заключение

В этой статье мы рассмотрели устаревшую функцию zip_open() — её синтаксис, параметры $flags и $error, возвращаемые значения и способ проверки результата с помощью is_resource(). Поскольку zip_open() была удалена в PHP 8.0, воспринимайте её как исторический справочник: современные приложения должны использовать класс ZipArchive для надёжного и безопасного управления архивами. См. также zip_read() и zip_close() для ознакомления с остальной частью устаревшего API.

Практика

Практика
Какие параметры принимает функция 'zip_open()' в PHP?
Какие параметры принимает функция 'zip_open()' в PHP?
Was this page helpful?