Что такое код zip_entry_compressionmethod


Содержание

zip_entry_compressionmethod

(PHP 4 >= 4.1.0, PHP 5 >= 5.2.0, PECL zip >= 1.0.0)

zip_entry_compressionmethod — Retrieve the compression method of a directory entry

Описание

Returns the compression method of the directory entry specified by zip_entry.

Список параметров

A directory entry returned by zip_read() .

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

The compression method.

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

  • zip_open() — Open a ZIP file archive
  • zip_read() — Read next entry in a ZIP file archive

Работа с zip-архивами в PHP

Уже долгие годы самым распространенным форматом сжатия данных, является формат ZIP. Данный формат широко используется в разработках под web. Поэтому многие языки для web-программирования имеют либо встроенные средства или возможности подключения необходимых библиотек для работы с zip-архивами.

Непосредственно в самом PHP функций для распаковки и создания zip-архивов нету. Хотя это зависит, от вариантов его сборки. Но они присутствуют в PHP расширении “php_zip”. И именно оно позволяет работать с архивными zip-файлами.

Распаковка архива

С распаковкой архивов при веб разработке, приходиться сталкиваться наиболее часто, нежели при разработке прикладного ПО. Особенно когда возникает необходимость в пакетной загрузке данных (документы, сертификаты и т.д.). Ведь даже диалоговое окно для открытия файла в браузере, не имеет возможности мульти выбора файлов. Конечно, можно воспользоваться каким-либо flash-загрузчиком, но во многих ситуациях это не подходит. А значит остается всего один вариант – архивация данных. Для работы по распаковке архива есть ряд функций встроенных в расширение php_zip:

Закрывает архивный zip-файл. Параметр zip обязан быть zip-архивом, открытым до этого функцией zip_open().

Закрывает вхождение директории, специфицированное параметром zip_entry . Параметр zip_entry обязан быть правильным вхождением директории, открытым функцией zip_entry_open().

int zip_entry_filesize (resource $zip_entry )

Возвращает фактический размер вхождения директории zip_entry. Параметр zip_entry обязан быть правильным вхождением директории, открытым функцией zip_read().

string zip_entry_name (resource $zip_entry )

Возвращает имя вхождения директории zip_entry. Параметр zip_entry обязан быть правильным вхождением директории, открытым функцией zip_read().

bool zip_entry_open (resource $zip , resource $zip_entry [, string $mode ])

Открывает вхождение директории в zip-файле для чтения. Параметр zip это правильный дескриптор ресурса, возвращённый функцией zip_open(). Параметр zip_entry это ресурс вхождения директории, возвращённый функцией zip_read(). Необязательный параметр mode может быть одним из режимов, специфицированных в документации для fopen().

Примечание: в настоящее время mode игнорируется и всегда имеет значение “rb”.Это из-за тог, что zip поддерживается в PHP с доступом только для чтения. Возвращает true при успехе, false при неудаче. В отличие от fopen() и других подобных функций, возвращаемое значение функции zip_entry_open() указывает только на результат операции и не нужно для чтения или закрытия вхождения директории.

string zip_entry_read (resource $zip_entry [, int $length ])

Читает до length байтов из открытого вхождения директории. Если параметр length не специфицирован, Функция zip_entry_read() пытается прочитать 1024 байта. Параметр zip_entry является правильным вхождением директории, возвращённым функцией zip_read(). Возвращает прочитанные данные, или false, если достигнут конец файла.

Примечание: параметр length должен быть несжатым размером, который вы хотите прочитать.

resource zip_open (string $filename )

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

resource zip_read (resource $zip )

Читает следующее вхождение в файле zip-архива. Параметр zip обязан быть zip-архивом, открытым ранее функцией zip_open(). Возвращает ресурс вхождения директории для дальнейшего использования с zip_entry_… () функциями.

int zip_entry_compressedsize(resource $zip_entry )

Параметр zip_entry обязан быть правильным вхождением директории, открытым функцией zip_read(). Возвращает сжатый размер вхождения директории zip_entry.

string zip_entry_compressionmethod (resource $zip_entry )

Параметр zip_entry обязан быть правильным вхождением директории, открытым функцией zip_read(). Возвращает метод сжатия для вхождения директории zip_entry.

Ниже приведен найденный и модифицированный мной исходный код функции для распаковки архива. Данная функция производит распаковку архива в корневой каталог. Поэтому если есть необходимость в создании директории для последующего расположения в ней распакованных файлов и каталогов, то ее требуется слегка изменить.

Выше был продемонстрирован классический пример распаковки архива. Обратите внимание на то, что указанный к архиву путь, должен быть абсолютным. Но тем не менее существует еще одна возможность, чтобы его распаковать. Для этого нужно прибегнуть к помощи методов класса ZipArchive. Этот класс находится все в том же расширении “php_zip”. Итак для того чтобы применить другой вариант распаковки, необходимо написать следующий код:

Для распаковки архива у данного класса используется только один метод:

bool extractTo (string $destination [, mixed $entries ])

Будущая директория местонахождения распакованного архива задается в параметре $destination . Параметр $entries содержит элементы для извлечения. Он является необязательным и может принимать как одно значение, так и массив значений.

Второй вариант выглядит намного красивее и компактнее, чем первый, не так ли? Поэтому я свой выбор остановил именно на нем. И напоследок протестируем оба варианта на скорость распаковки архива объемом в 205Mb:

Создание архива

Создание архива происходит сложнее, чем его распаковка. Если конечно требуется создать архив с одним файлом или одной директорией, то здесь все просто. А вот если упаковывать директории с неограниченным уровнем вложенности каталогов, то здесь уже придется немного подумать. Во-первых, необходим хороший рекурсивный алгоритм для обхода директорий. Во-вторых, нужно дополнительно хранить локальное имя файла/каталога. Итак, для создания архива нам понадобятся четыре метода класса ZipArchive:

    bool addEmptyDir (string $dirname )

Добавляет в архив пустую директорию. Параметр dirname должен содержать имя директории. Метод в случае успеха возвращает true или false в противном случае.

vo >$filename [, string $localname = NULL [, int $start = 0 [, int $length = 0 ]]])

Добавляет в архив файл, который находится по указанному в параметре filename пути. Параметр localname отвечает за имя файла в архиве. И если он указан, то параметр filename будет переопределен. Параметры start и length , зарезервированы для будущих целей. Данный метод так же в случае успеха возвращает true или false в случае ошибки.

vo >$filename [, int $flags ])

Данный метод необходим для открытия нового архива с целью: чтения, записи или создания. Параметр filename должен содержать имя архива. Необязательный параметр flags используется в качестве режима открытия файла (ZIPARCHIVE::OVERWRITE, ZIPARCHIVE::CREATE, ZIPARCHIVE::EXCL, ZIPARCHIVE::CHECKCONS). Метод возвращает true в случае успеха или код ошибки (см. предопределенные константы ошибок).

vo >Этот метод закрывает открытый или созданный архив и сохраняет изменения. Данный метод автоматически вызывается в конце сценария.

Ниже приведен исходный код созданного класса, позволяющего производить создание zip-архивов:

Данный класс позволяет создавать архив из каталогов с неограниченным уровнем вложенности. Для создания архива, необходимо вызвать только один метод ToZip.

    bool ToZip (string $source , string $destination )

Создает zip-архив. В параметре source требуется указать путь к каталогу или файлу, который требуется запаковать. А в качестве параметра destination передается имя будущего архива. Метод возвращает true в случае успеха или false в случае возникновения ошибки.

Предопределенные константы режима работы

ZIPARCHIVE::CREATE (integer) Создавать архив, если он не существует.
ZIPARCHIVE::OVERWRITE (integer) Всегда создавать новый архив, этот режим перезаписывает файлы, если они существуют.
ZIPARCHIVE::EXCL (integer) Выводить ошибку, если архив существует.
ZIPARCHIVE::CHECKCONS (integer) Выполнять дополнительные проверки на структуру архива, и выдавать ошибку при неудаче.

Предопределенные константы флагов


ZIPARCHIVE::FL_NOCASE (integer) Игнорировать регистр символов в именах элементов архива.
ZIPARCHIVE::FL_NODIR (integer) Не учитывать пути директорий в архиве.
ZIPARCHIVE::FL_COMPRESSED (integer) Читать сжатые данные.
ZIPARCHIVE::FL_UNCHANGED (integer) Использовать исходные данные, игнорируя изменения.

Предопределенные константы методов сжатия

ZIPARCHIVE::CM_DEFAULT (integer) Выбрать лучший метод сжатия deflate или stored (без сжатия).
ZIPARCHIVE::CM_STORE (integer) Метод сжатия stored (без сжатия).
ZIPARCHIVE::CM_SHRINK (integer) Метод сжатия shrunk.
ZIPARCHIVE::CM_REDUCE_1 (integer) Метод сжатия reduced with factor 1.
ZIPARCHIVE::CM_REDUCE_2 (integer) Метод сжатия reduced with factor 2.
ZIPARCHIVE::CM_REDUCE_3 (integer) Метод сжатия reduced with factor 3.
ZIPARCHIVE::CM_REDUCE_4 (integer) Метод сжатия reduced with factor 4.
ZIPARCHIVE::CM_IMPLODE (integer) Метод сжатия imploded.
ZIPARCHIVE::CM_DEFLATE (integer) Метод сжатия deflated.
ZIPARCHIVE::CM_DEFLATE64 (integer) Метод сжатия deflate64.
ZIPARCHIVE::CM_PKWARE_IMPLODE (integer) Метод сжатия PKWARE imploding.
ZIPARCHIVE::CM_BZIP2 (integer) Метод сжатия алгоритмом BZIP2

Предопределенные константы ошибок

Zip File. Extract ToDirectory Метод

Определение

Извлекает все файлы в указанном ZIP-архиве в каталогу в файловой системе. Extracts all the files in the specified zip archive to a directory on the file system.

Перегрузки

Извлекает все файлы в указанном ZIP-архиве в каталогу в файловой системе. Extracts all the files in the specified zip archive to a directory on the file system.

Извлекает все файлы в указанном архиве в каталоге в файловой системе. Extracts all of the files in the specified archive to a directory on the file system.

Извлекает все файлы в указанном ZIP-архиве к каталог в файловой системе и использует указанную кодировку для имен записей. Extracts all the files in the specified zip archive to a directory on the file system and uses the specified character encoding for entry names.

Извлекает все файлы в указанном архиве в каталоге в файловой системе. Extracts all of the files in the specified archive to a directory on the file system.

ExtractToDirectory(String, String)

Извлекает все файлы в указанном ZIP-архиве в каталогу в файловой системе. Extracts all the files in the specified zip archive to a directory on the file system.

Параметры

Путь к архиву, который требуется извлечь. The path to the archive that is to be extracted.

Путь к каталогу, в котором следует поместить извлеченные файлы, заданный как относительный или абсолютный путь. The path to the directory in which to place the extracted files, specified as a relative or absolute path. Относительный путь интерпретируется относительно текущего рабочего каталога. A relative path is interpreted as relative to the current working directory.

Исключения

Параметр destinationDirectoryName или sourceArchiveFileName является Empty, содержит только пробелы или хотя бы один недопустимый символ. destinationDirectoryName or sourceArchiveFileName is Empty, contains only white space, or contains at least one invalid character.

Параметр destinationDirectoryName или sourceArchiveFileName имеет значение null . destinationDirectoryName or sourceArchiveFileName is null .

Указанная длина пути в destinationDirectoryName или sourceArchiveFileName превышает максимальную длину, определенную в системе. The specified path in destinationDirectoryName or sourceArchiveFileName exceeds the system-defined maximum length.

Указанный путь недопустим (например, он соответствует неподключенному диску). The specified path is invalid (for example, it is on an unmapped drive).

Каталог, заданный параметром destinationDirectoryName , уже существует. The directory specified by destinationDirectoryName already exists.

-или- -or- Имя записи в архиве имеет значение Empty, содержит только пробелы или содержит по крайней мере один недопустимый символ. The name of an entry in the archive is Empty, contains only white space, or contains at least one invalid character.

— или — -or- Извлечение записи архива создаст файл, который находится вне каталога, заданного destinationDirectoryName . Extracting an archive entry would create a file that is outs >destinationDirectoryName . (Например, это может произойти, если имя записи содержит методы доступа родительского каталога.) (For example, this might happen if the entry name contains parent directory accessors.) -или- -or- Запись архива, которую требуется извлечь, имеет то же имя, что и запись, которая уже была извлекается из того же архива. An archive entry to extract has the same name as an entry that has already been extracted from the same archive.

Вызывающий код не имеет необходимого разрешения на доступ к архиву или целевому каталогу. The caller does not have the required permission to access the archive or the destination directory.

destinationDirectoryName или sourceArchiveFileName содержит недопустимый формат. destinationDirectoryName or sourceArchiveFileName contains an invalid format.

Не удалось найти sourceArchiveFileName . sourceArchiveFileName was not found.

Архив, заданный параметром sourceArchiveFileName , не является допустимым ZIP-архивом. The archive specified by sourceArchiveFileName is not a valid zip archive.

-или- -or- Не удалось найти запись архива или она была повреждена. An archive entry was not found or was corrupt.

— или — -or- Запись архива была сжата с помощью неподдерживаемого метода сжатия. An archive entry was compressed by using a compression method that is not supported.

Примеры

В этом примере показано, как создать и извлечь ZIP-архив с помощью ZipFile класса. This example shows how to create and extract a zip archive by using the ZipFile class. Она сжимает содержимое папки в ZIP-архив и извлекает это содержимое в новую папку. It compresses the contents of a folder into a zip archive and extracts that content to a new folder. Чтобы использовать класс ZipFile, укажите в проекте ссылку на сборку System.IO.Compression.FileSystem . To use the ZipFile class, you must reference the System.IO.Compression.FileSystem assembly in your project.

Комментарии

Этот метод создает указанный каталог и все подкаталоги. This method creates the specified directory and all subdirectories. Каталог назначения не может уже существовать. The destination directory cannot already exist. Исключения, связанные с проверкой путей в destinationDirectoryName параметрах или sourceArchiveFileName , вызываются перед извлечением. Exceptions related to validating the paths in the destinationDirectoryName or sourceArchiveFileName parameters are thrown before extraction. В противном случае, если во время извлечения возникает ошибка, архив остается частично извлеченным. Otherwise, if an error occurs during extraction, the archive remains partially extracted. Каждый извлеченный файл имеет тот же относительный путь к каталогу, destinationDirectoryName который указан в качестве исходной записи в корневую папку архива. Each extracted file has the same relative path to the directory specified by destinationDirectoryName as its source entry has to the root of the archive.

ExtractToDirectory(String, String, Boolean)

Извлекает все файлы в указанном архиве в каталоге в файловой системе. Extracts all of the files in the specified archive to a directory on the file system.

Параметры

Путь в файловой системе к архиву, который требуется извлечь. The path on the file system to the archive that is to be extracted.

Путь к целевому каталогу в файловой системе. The path to the destination directory on the file system. Указанный каталог не должен существовать, но каталог, в котором он находится, должен существовать. The directory specified must not exist, but the directory that it is contained in must exist.

Значение true для перезаписи файлов; в противном случае — значение false . true to overwrite files; false otherwise.

Исключения

sourceArchiveFileName или destinationDirectoryName представляет собой строку нулевой длины, содержащую только пробелы или один или несколько недопустимых символов, заданных методом InvalidPathChars. sourceArchiveFileName or destinationDirectoryName is a zero-length string, contains only whitespace, or contains one or more invalid characters as defined by InvalidPathChars.

Параметр sourceArchiveFileName или destinationDirectoryName имеет значение null . sourceArchiveFileName or destinationDirectoryName is null .

sourceArchiveFileName или destinationDirectoryName указывает путь, имя файла или оба параметра, которые превышают установленное в системе максимальное значение. sourceArchiveFileName or destinationDirectoryName specifies a path, a file name, or both that exceed the system-defined maximum length.

Путь, указанный sourceArchiveFileName или destinationDirectoryName , является недопустимым (например, он ведет на несопоставленный диск). The path specified by sourceArchiveFileName or destinationDirectoryName is invalid (for example, it is on an unmapped drive).

Каталог, заданный параметром destinationDirectoryName , уже существует. The directory specified by destinationDirectoryName already exists.

Произошла ошибка ввода-вывода. An I/O error has occurred.

Имя ZipArchiveEntry имеет нулевую длину, содержит только пробелы или один или несколько недопустимых символов, заданных методом InvalidPathChars. The name of a ZipArchiveEntry is zero-length, contains only whitespace, or contains one or more invalid characters as defined by InvalidPathChars.

Извлечение ZipArchiveEntry может привести к назначению файла, находящегося за пределами целевого каталога (например, из-за наличия методов доступа к родительскому каталогу). Extracting a ZipArchiveEntry would result in a file destination that is outside the destination directory (for example, because of parent directory accessors).

ZipArchiveEntry имеет то же имя, что и уже извлеченная запись из того же архива. A ZipArchiveEntry has the same name as an already extracted entry from the same archive.

У вызывающего объекта отсутствует необходимое разрешение. The caller does not have the required permission.

Параметр sourceArchiveFileName или destinationDirectoryName имеет недопустимый формат. sourceArchiveFileName or destinationDirectoryName is in an invalid format.

Не удалось найти sourceArchiveFileName . sourceArchiveFileName was not found.

Архив, заданный параметром sourceArchiveFileName , не является допустимым ZipArchive. The archive specified by sourceArchiveFileName is not a valid ZipArchive.

ZipArchiveEntry поврежден или не может быть найден. A ZipArchiveEntry was not found or was corrupt.

ZipArchiveEntry сжат с помощью неподдерживаемого метода сжатия. A ZipArchiveEntry has been compressed using a compression method that is not supported.

Комментарии

Указанный каталог не должен существовать. The specified directory must not exist. Метод создает указанный каталог и все подкаталоги. The method creates the specified directory and all subdirectories.

Если при извлечении архива возникла ошибка, архив будет извлечен частично. If there is an error while extracting the archive, the archive will remain partially extracted.

Каждая запись будет извлечена таким образом, что извлеченный файл имеет тот же относительный путь к тому destinationDirectoryName , что и запись в архив. Each entry will be extracted such that the extracted file has the same relative path to the destinationDirectoryName as the entry has to the archive.

Путь может указывать сведения относительного или абсолютного пути. The path can specify relative or absolute path information. Относительный путь интерпретируется относительно текущего рабочего каталога. A relative path is interpreted as relative to the current working directory.

Если файл для архивации имеет неверное время последнего изменения, то будет использоваться первая дата и время, представленные в формате метки времени ZIP (полночь 1 января 1980). If a file to be archived has an invalid last modified time, the first date and time representable in the Zip timestamp format (midnight on January 1, 1980) will be used.

ExtractToDirectory(String, String, Encoding)

Извлекает все файлы в указанном ZIP-архиве к каталог в файловой системе и использует указанную кодировку для имен записей. Extracts all the files in the specified zip archive to a directory on the file system and uses the specified character encoding for entry names.

Параметры

Путь к архиву, который требуется извлечь. The path to the archive that is to be extracted.

Путь к каталогу, в котором следует поместить извлеченные файлы, заданный как относительный или абсолютный путь. The path to the directory in which to place the extracted files, specified as a relative or absolute path. Относительный путь интерпретируется относительно текущего рабочего каталога. A relative path is interpreted as relative to the current working directory.

Кодирование, используемое при чтении или записи имен записей в этом архиве. The encoding to use when reading or writing entry names in this archive. Задайте значение для этого параметра, только если кодирование требуется для взаимодействия с инструментами и библиотеками ZIP-архива, которые не поддерживают кодирование UTF-8 для имен записей. Specify a value for this parameter only when an encoding is required for interoperability with zip archive tools and libraries that do not support UTF-8 encoding for entry names.

Исключения


Параметр destinationDirectoryName или sourceArchiveFileName является Empty, содержит только пробелы или хотя бы один недопустимый символ. destinationDirectoryName or sourceArchiveFileName is Empty, contains only white space, or contains at least one invalid character.

-или- -or- entryNameEncoding установлено на кодировку Юникода, отличное от UTF-8. entryNameEncoding is set to a Unicode encoding other than UTF-8.

Значение параметра destinationDirectoryName или sourceArchiveFileName — null . destinationDirectoryName or sourceArchiveFileName is null .

Указанная длина пути в destinationDirectoryName или sourceArchiveFileName превышает максимальную длину, определенную в системе. The specified path in destinationDirectoryName or sourceArchiveFileName exceeds the system-defined maximum length.

Указанный путь недопустим (например, он соответствует неподключенному диску). The specified path is invalid (for example, it is on an unmapped drive).

Каталог, заданный параметром destinationDirectoryName , уже существует. The directory specified by destinationDirectoryName already exists.

— или — -or- Имя записи в архиве имеет значение Empty, содержит только пробелы или содержит по крайней мере один недопустимый символ. The name of an entry in the archive is Empty, contains only white space, or contains at least one invalid character.

— или — -or- Извлечение записи архива создаст файл, который находится вне каталога, заданного destinationDirectoryName . Extracting an archive entry would create a file that is outs >destinationDirectoryName . (Например, это может произойти, если имя записи содержит методы доступа родительского каталога.) (For example, this might happen if the entry name contains parent directory accessors.) — или — -or- Запись архива, которую требуется извлечь, имеет то же имя, что и запись, которая уже была извлекается из того же архива. An archive entry to extract has the same name as an entry that has already been extracted from the same archive.

Вызывающий код не имеет необходимого разрешения на доступ к архиву или целевому каталогу. The caller does not have the required permission to access the archive or the destination directory.

destinationDirectoryName или sourceArchiveFileName содержит недопустимый формат. destinationDirectoryName or sourceArchiveFileName contains an invalid format.

Не удалось найти sourceArchiveFileName . sourceArchiveFileName was not found.

Архив, заданный параметром sourceArchiveFileName , не является допустимым ZIP-архивом. The archive specified by sourceArchiveFileName is not a valid zip archive.

— или — -or- Не удалось найти запись архива или она была повреждена. An archive entry was not found or was corrupt.

-или- -or- Запись архива была сжата с помощью неподдерживаемого метода сжатия. An archive entry was compressed by using a compression method that is not supported.

Комментарии

Этот метод создает указанный каталог и все подкаталоги. This method creates the specified directory and all subdirectories. Каталог назначения не может уже существовать. The destination directory cannot already exist. Исключения, связанные с проверкой путей в destinationDirectoryName параметрах или sourceArchiveFileName , вызываются перед извлечением. Exceptions related to validating the paths in the destinationDirectoryName or sourceArchiveFileName parameters are thrown before extraction. В противном случае, если во время извлечения возникает ошибка, архив остается частично извлеченным. Otherwise, if an error occurs during extraction, the archive remains partially extracted. Каждый извлеченный файл имеет тот же относительный путь к каталогу, destinationDirectoryName который указан в качестве исходной записи в корневую папку архива. Each extracted file has the same relative path to the directory specified by destinationDirectoryName as its source entry has to the root of the archive.

Если entryNameEncoding для параметра задано значение, отличное null от, имена записей декодированы в соответствии со следующими правилами. If entryNameEncoding is set to a value other than null , entry names are decoded according to the following rules:

Для имен записей, в которых не задан флаг кодировки языка (в битовом флаге общего назначения локального заголовка файла), имена записей декодированы с использованием указанной кодировки. For entry names where the language encoding flag (in the general-purpose bit flag of the local file header) is not set, the entry names are decoded by using the specified encoding.

Для записей, в которых установлен флаг кодировки языка, имена записей декодированы с помощью UTF-8. For entries where the language encoding flag is set, the entry names are decoded by using UTF-8.

Если entryNameEncoding параметр имеет null значение, имена записей декодированы в соответствии со следующими правилами. If entryNameEncoding is set to null , entry names are decoded according to the following rules:

Для записей, в которых не задан флаг кодировки языка (в битовом флаге общего назначения локального заголовка файла), имена записей декодированы с использованием текущей системной кодовой страницы по умолчанию. For entries where the language encoding flag (in the general-purpose bit flag of the local file header) is not set, entry names are decoded by using the current system default code page.

Для записей, в которых установлен флаг кодировки языка, имена записей декодированы с помощью UTF-8. For entries where the language encoding flag is set, the entry names are decoded by using UTF-8.

ExtractToDirectory(String, String, Encoding, Boolean)

Извлекает все файлы в указанном архиве в каталоге в файловой системе. Extracts all of the files in the specified archive to a directory on the file system.

Параметры

Путь в файловой системе к архиву, который требуется извлечь. The path on the file system to the archive that is to be extracted.

Путь к целевому каталогу в файловой системе. The path to the destination directory on the file system. Указанный каталог не должен существовать, но каталог, в котором он находится, должен существовать. The directory specified must not exist, but the directory that it is contained in must exist.

Кодирование, используемое при чтении имен записей в этом ZipArchive. The encoding to use when reading entry names in this ZipArchive.

Значение true для перезаписи файлов; в противном случае — значение false . true to overwrite files; false otherwise.

Исключения

sourceArchiveFileName или destinationDirectoryName представляет собой строку нулевой длины, содержащую только пробелы или один или несколько недопустимых символов, заданных методом InvalidPathChars. sourceArchiveFileName or destinationDirectoryName is a zero-length string, contains only whitespace, or contains one or more invalid characters as defined by InvalidPathChars.

— или — -or- entryNameEncoding установлено на кодировку Юникода, отличное от UTF-8. entryNameEncoding is set to a Unicode encoding other than UTF-8.

Параметр sourceArchiveFileName или destinationDirectoryName имеет значение null . sourceArchiveFileName or destinationDirectoryName is null .

sourceArchiveFileName или destinationDirectoryName указывает путь, имя файла или оба параметра, которые превышают установленное в системе максимальное значение. sourceArchiveFileName or destinationDirectoryName specifies a path, a file name, or both that exceed the system-defined maximum length.

Путь, указанный sourceArchiveFileName или destinationDirectoryName , является недопустимым (например, он ведет на несопоставленный диск). The path specified by sourceArchiveFileName or destinationDirectoryName is invalid (for example, it is on an unmapped drive).

Каталог, заданный параметром destinationDirectoryName , уже существует. The directory specified by destinationDirectoryName already exists.

Произошла ошибка ввода-вывода. An I/O error has occurred.

Имя ZipArchiveEntry имеет нулевую длину, содержит только пробелы или один или несколько недопустимых символов, заданных методом InvalidPathChars. The name of a ZipArchiveEntry is zero-length, contains only whitespace, or contains one or more invalid characters as defined by InvalidPathChars.

Извлечение ZipArchiveEntry может привести к назначению файла, находящегося за пределами целевого каталога (например, из-за наличия методов доступа к родительскому каталогу). Extracting a ZipArchiveEntry would result in a file destination that is outside the destination directory (for example, because of parent directory accessors).

ZipArchiveEntry имеет то же имя, что и уже извлеченная запись из того же архива. A ZipArchiveEntry has the same name as an already extracted entry from the same archive.

У вызывающего объекта отсутствует необходимое разрешение. The caller does not have the required permission.

Параметр sourceArchiveFileName или destinationDirectoryName имеет недопустимый формат. sourceArchiveFileName or destinationDirectoryName is in an invalid format.

Не удалось найти sourceArchiveFileName . sourceArchiveFileName was not found.

Архив, заданный параметром sourceArchiveFileName , не является допустимым ZipArchive. The archive specified by sourceArchiveFileName is not a valid ZipArchive.

Не удалось найти запись архива или она была повреждена. An archive entry was not found or was corrupt.

Запись архива была сжата с использованием неподдерживаемого метода сжатия. An archive entry has been compressed using a compression method that is not supported.

Комментарии

Указанный каталог не должен существовать. The specified directory must not exist. Этот метод создаст указанный каталог и все подкаталоги. This method will create the specified directory and all subdirectories.

Если при извлечении архива возникла ошибка, архив будет извлечен частично. If there is an error while extracting the archive, the archive will remain partially extracted.

Каждая запись будет извлечена таким образом, что извлеченный файл имеет тот же относительный путь к тому destinationDirectoryName , что и запись в архив. Each entry will be extracted such that the extracted file has the same relative path to the destinationDirectoryName as the entry has to the archive.

Путь может указывать сведения относительного или абсолютного пути. The path can specify relative or absolute path information. Относительный путь интерпретируется относительно текущего рабочего каталога. A relative path is interpreted as relative to the current working directory.

Если файл для архивации имеет неверное время последнего изменения, то будет использоваться первая дата и время, представленные в формате метки времени ZIP (полночь 1 января 1980). If a file to be archived has an invalid last modified time, the first date and time representable in the Zip timestamp format (midnight on January 1, 1980) will be used.

Почему мой SharpZipLib ZipEntry.Comment не получает набор (или прочитать)?

Я работаю на инструмент , который использует SharpZipLib для добавления файлов в ZipFile, с комментарием против ZipEntry хранить часть метаданных мне нужно. (Я знаю , что есть и другие способы , я мог бы обрабатывать эти метаданные, но я хотел бы избежать перепроектирования моего решения , если я могу избежать его.)

[Немного упрощенный] код, используемый для записи файла и метаданных в ZipFile гласит:

Испытание проводов для этого, то читает:

Теперь мой ZipFile создаются — и она действительно содержит мое тестовое изображение Ddraig arian.png -, то ZipEntry успешно было найдено, но StringAssert вызов всегда удается. Я не совсем уверен в том , что это провал , потому что это не написано , или если он терпит неудачу , потому что он не читал .

Теперь я знаю , что вы должны использовать ZipFile / ZipEntry получить доступ к ZipEntry.Comment , так как ZipInputStream не позволяет добраться до Comment , но я имею в использовании ZipFile и ZipEntry , таким образом , я не могу понять , почему это не будет работать.

У кого-нибудь есть идеи?

(Немного странно , близкий и-возобновлять в AddFileToZip потому , что ZipFile.GetEntry вызов был всегда удается, по- видимому , потому что ZipEntry еще не были записаны в индексный файл. И да, мой тестовый файл действительно серебряный дракон .)

Да, это не будет работать, как это, насколько я могу судить. Комментарий не записывается и не будет дано текущей итерации библиотеки.

Я не использовал эту библиотеку на всех, но делать некоторые проверки исходного кода:

Если мы рассмотрим здесь в исходном коде мы можем видеть , что это работает только обновление , если contentsEdited. Хм. Интересно , что устанавливает , что? Кажется вероятным виновником.

Поиск по всем мы находим следующее замечания подозрительно прилагается к некоторым закомментирован коду

И вообще искать вокруг в исходном коде, мы находим много половин закончили мусор вокруг модификации записей.

Поэтому в основном я думаю, что вы ударяя это половина закончена библиотека, которая не делает то, что вы хотите. Сожалею. :-)

Некоторая дополнительный код археология не обнаруживает метода мне для написания комментария когда вы сначала добавить файл, увы. Можно было бы взломать что-нибудь вместе выуживание объект ZipEntry каким-то образом, прежде чем совершить обновление, но как ускользает меня.

Вы бы быть в состоянии использовать DotNetZip ? Я считаю , что проще использовать большую часть времени, я был в состоянии получить комментарии ZipEntry работает, смотрите ниже.

Использование DotNetZip:

Оказывается , что SharpZipLib не полностью поддерживает ZipEntry.Comment , см @DRMacIver ответ на хорошие исследования там, я также попробовал несколько способов , и не могу понять это (я могу установить свой комментарий и сохранить, но когда я снова прочитал это ноль).


Я не знаю, почему он не работает, но я бы предположил, что это может быть потому, что стандарт zifiles не поддерживает комментарии для файлов, только один комментарий для всего архива. Таким образом, я думаю, они могли бы быть расширение почтового индекса, чтобы поддержать это, может быть, они никогда не закончили его или никогда не проверяли.

Unrelated, но я упомяну, что я сделал тесты ранее и SharpZipLib удалось добиться немного большего сжатия, но простота использования DotNetZip еще сделала это лучшее решение для меня.

Я не пробовал использовать SharpZipLib читать почтовый файл, созданный с помощью DotNetZip с работой комментариев, чтобы увидеть, если это может быть проблема с чтением его или написать его (мне интересно об этом)

Что такое код zip_entry_compressionmethod

BUILD SUCCESSFUL
Total time: 2 minutes 0 seconds
cmd /c «»c:\Program Files\Java\jdk1.6.0_45\bin\jarsigner» -digestalg SHA1 -sigalg MD5withRSA -keystore «C:\Users\Которобот\AppData\Local\GameMaker-Studio\keystore.keystore» -storepass PleaseChangeMe -keypass PleaseChangeMe «C:\Users\Которобот\AppData\Local\Temp\gm_ttt_88733\gm_ttt_584\bin\RunnerActivity-release.apk» alias»

jarsigner: unable to sign jar: java.util.zip.ZipException: invalid entry compressed size (expected 5159 but got 5232 bytes)
cmd /c «»C:\adt-bundle-windows-x86_64-20140702\adt-bundle-windows-x86_64-20140702\sdk\tools\zipalign» -v 4 «C:\Users\Которобот\AppData\Local\Temp\gm_ttt_88733\gm_ttt_584\bin\RunnerActivity-release.apk» «C:\Users\Которобот\Desktop\Google_Mobile_Ads16-Default-1.0.16.apk»»

«»C:\adt-bundle-windows-x86_64-20140702\adt-bundle-windows-x86_64-20140702\sdk\tools\zipalign»» �� ���� ����७��� ��� ���譥�
��������, �ᯮ��塞�� �ணࠬ��� ��� ������ 䠩���.

Что такое код zip_entry_compressionmethod

Профиль
Группа: Участник
Сообщений: 69
Регистрация: 15.3.2008

Репутация: нет
Всего: нет

Код
$zip = zip_open(«mod_4you_single.zip»);

while ($zip_entry = zip_read($zip)) <
echo «Name: » . zip_entry_name($zip_entry) . «\n»;
echo «Actual Filesize: » . zip_entry_filesize($zip_entry) . «\n»;
echo «Compressed Size: » . zip_entry_compressedsize($zip_entry) . «\n»;
echo «Compression Method: » . zip_entry_compressionmethod($zip_entry) . «\n»;

if (zip_entry_open($zip, $zip_entry, «r»)) <
echo «File Contents:\n»;
$buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
echo «$buf\n»;

zip_entry_close($zip_entry);
>
echo «\n»;

Запускаешь код, пишет: «Warning: zip_read() expects parameter 1 to be resource, integer given in E:\www\html\tutor\1.php on line 8
«
Код взят с мануала, потому должен работать. В mod_4you_single.zip — обычный xml-файл.
Что не так?

Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 1
Всего: 37

Ипатьев
Дата 31.8.2009, 12:26 (ссылка) | (нет голосов) Загрузка .
Цитата(Finder128 @ 31.8.2009, 09:26 )
Что не так?

Профиль
Группа: Участник
Сообщений: 69
Регистрация: 15.3.2008

Репутация: нет
Всего: нет

Finder128
Дата 31.8.2009, 14:19 (ссылка) | (нет голосов) Загрузка .
Цитата(Ипатьев @ 31.8.2009, 12:26)
Цитата(Finder128 @ 31.8.2009, 09:26 )
Что не так?

zip_read() expects parameter 1 to be resource, integer given

Профиль
Группа: Завсегдатай
Сообщений: 2232
Регистрация: 5.7.2009

Репутация: 1
Всего: 37

Это означает, что в переменной $zip лежит не то, что ожидалось.
Следовательно, надо разбираться с функцией, которая ее возвращает.
В частности — почитать ее описание в документации.

zip_entry_compressionmethod

(PHP 4 >= 4.1.0, PHP 5 >= 5.2.0, PECL zip >= 1.0.0)

zip_entry_compressionmethod — Retrieve the compression method of a directory entry

Описание

Returns the compression method of the directory entry specified by zip_entry.

Список параметров

A directory entry returned by zip_read() .

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

The compression method.

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

  • zip_open() — Open a ZIP file archive
  • zip_read() — Read next entry in a ZIP file archive

Недопустимый входной размер сжатия

Я использую библиотеку байт-кода, известную как ASM, для изменения файлов классов, а затем я хочу записать каждый классный файл обратно в файл jar, а не в папку, заполненную файлами классов. Я делаю это, запустив этот код:

Моя проблема возникает, когда исключение ZipException выбрано для не ожидаемого размера, т.е.

ClassReader, ClassWriter (каждая часть библиотеки) и FieldAdapter (сделанные мною сами) просто презирают код, а для получения байтов всего класса я использую cw.toByteArray(). Нет никакой проблемы, как для манипуляции с байткодом, это просто запись в новый файл jar через JarOutputStream. Кто-нибудь знает, как решить эту проблему?

Проблемная строка такова:

так как он также скопирует сжатый размер.

Если вы не заботитесь о сохранении других полей, кроме имени, вы должны использовать этот конструктор и указать только имя файла, так как это:

Затем автоматически вычисляется сжатый размер.

делая таким образом, он не будет копировать атрибуты Jar и другую метаинформацию. Проблема возникает, когда файл jar/zip изменяется после его первоначальной упаковки.

Вы можете сделать это:

Это приведет к пересчету размера записи, и вы скопируете все другие атрибуты из исходного jarEntry

Что такое код zip_entry_compressionmethod

(PHP 4 >= 4.1.0, PECL)

zip_entry_compressionmethod — Retrieve the compression method of a directory entry

Описание string zip_entry_compressionmethod ( resource zip_entry )

Returns the compression method of the directory entry specified by zip_entry .

Список параметров

A directory entry returned by zip_read() .

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

The compression method.

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


Ипатьев
Дата 31.8.2009, 16:32 (ссылка) | (нет голосов) Загрузка .
Пред. Начало След.
zip_entry_compressedsize Уровень выше zip_entry_filesize

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

zip_entry_compressionmethod

Руководство по PHP
Пред. След.

zip_entry_compressionmethod

(PHP 4 >= 4.1.0, PECL)

zip_entry_compressionmethod — Retrieve the compression method of a directory entry

Описание

Returns the compression method of the directory entry specified by zip_entry .

Илон Маск рекомендует:  Что такое код mysql_num_fields
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL