W3docs

zip_entry_compressedsize()

Функция zip_entry_compressedsize() в PHP возвращает сжатый размер файла внутри zip-архива. Устарела в PHP 7.4 и удалена в PHP 8.0.

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

На этой странице объясняется, что возвращала функция, как она использовалась, и — что важнее всего — чем её заменить, поскольку функция была признана устаревшей в PHP 7.4 и удалена в PHP 8.0. При вызове на любой современной установке PHP (8.0 и выше) она вызывает фатальную ошибку Error, поэтому следует использовать класс ZipArchive, показанный ниже.

Зачем нужен сжатый размер

Каждый файл в zip-архиве имеет два размера:

  • Несжатый размер — исходная длина файла в байтах. См. zip_entry_filesize().
  • Сжатый размер — длина в байтах после уменьшения алгоритмом deflate. Именно это и возвращала zip_entry_compressedsize().

Сравнение двух значений показывает степень сжатия. Хорошо сжимаемый текст может уменьшиться до 20% от исходного размера, тогда как уже сжатые данные (JPEG, MP3) практически не меняются. Знание сжатого размера полезно для отображения прогресс-баров, планирования хранилища и оценки целесообразности повторного архивирования.

Синтаксис

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

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

int zip_entry_compressedsize(resource $zip_entry)

Где $zip_entry — дескриптор записи zip-архива, возвращённый функцией zip_read() для файла в архиве. Функция возвращает сжатый размер в виде целого числа байт. Обратите внимание, что эта функция принадлежит устаревшему расширению zip и недоступна в PHP 8.0+.

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

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

Пример: получение сжатого размера файла в zip-архиве

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

Получение сжатого размера файла в zip-архиве на PHP

$zip = zip_open("example.zip");
if ($zip === false) {
    die("Failed to open zip archive.");
}

$zip_entry = zip_read($zip);
if ($zip_entry === false) {
    die("Failed to read zip entry.");
}

// get the compressed size of the file
$compressed_size = zip_entry_compressedsize($zip_entry);

echo "The compressed size of the file is: " . $compressed_size . " bytes.";

Этот код открывает zip-архив example.zip с помощью zip_open(). Затем мы считываем файл из архива с помощью zip_read() и получаем его сжатый размер с помощью zip_entry_compressedsize(). Наконец, сжатый размер выводится пользователю. В реальном скрипте вы бы использовали цикл с zip_read() для перебора всех записей и вызывали бы zip_close() по окончании.

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

Поскольку устаревшие функции zip_* были удалены в PHP 8.0, рекомендуется использовать встроенный класс ZipArchive. Вот как можно получить сжатый размер файла с помощью ZipArchive:

$zip = new ZipArchive;
if ($zip->open('example.zip') === true) {
    $index = $zip->locateName('example.txt');
    if ($index !== false) {
        $stat = $zip->statIndex($index);
        $compressedSize   = $stat['comp_size']; // equivalent of zip_entry_compressedsize()
        $uncompressedSize = $stat['size'];      // original size

        echo "Compressed:   {$compressedSize} bytes\n";
        echo "Uncompressed: {$uncompressedSize} bytes\n";

        if ($uncompressedSize > 0) {
            $ratio = round(100 * (1 - $compressedSize / $uncompressedSize), 1);
            echo "Space saved:  {$ratio}%\n";
        }
    }
    $zip->close();
}

Метод statIndex() возвращает ассоциативный массив с описанием записи; ключ comp_size содержит сжатый размер, который раньше возвращала устаревшая функция, а size — несжатый размер. Поскольку оба значения доступны, можно вычислить степень сжатия напрямую, как показано выше.

Заключение

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

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

Практика

Практика
Какова функциональность zip_entry_compressedsize() в PHP?
Какова функциональность zip_entry_compressedsize() в PHP?
Was this page helpful?