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_filesize()— получить несжатый размер записи.zip_entry_name()— получить имя записи.zip_entry_compressionmethod()— узнать метод сжатия записи.zip_read()иzip_open()— открыть архив и перебрать его записи.- Обзор расширения PHP Zip — современный класс
ZipArchive.