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.