Zip entry filesize: примеры (PHP)
zip_entry_filesize(resource zip_entry): intФункция zip_entry_filesize возвращает исходный (несжатый) размер файла внутри ZIP-архива. Она является частью устаревшего модуля Zip, основанного на библиотеке ZZIPlib.
Функция применяется при необходимости получить информацию о конкретном элементе архива в процессе его чтения. Она используется в связке с функциями zip_open(), zip_read(), zip_entry_open().
Функция принимает один обязательный параметр:
- zip_entry (ресурс) — ресурс записи архива, полученный с помощью функции
zip_read().
Функция возвращает исходный размер файла в байтах. В случае возникновения ошибки возвращается false.
Пример получения размера файла для первой записи в архиве.
$zip = zip_open('archive.zip');
if ($zip) {
$entry = zip_read($zip);
if ($entry) {
$size = zip_entry_filesize($entry);
echo "Размер файла: $size байт";
}
zip_close($zip);
}Размер файла: 1024 байт
Пример обхода всех элементов архива и вывода их размеров.
$zip = zip_open('archive.zip');
if (is_resource($zip)) {
while ($entry = zip_read($zip)) {
$name = zip_entry_name($entry);
$size = zip_entry_filesize($entry);
echo "Файл: $name, Размер: $size байт
";
}
zip_close($zip);
}Файл: document.txt, Размер: 1500 байт
Файл: image.jpg, Размер: 30720 байт
Основной современной альтернативой является расширение ZipArchive.
Предоставляет объектно-ориентированный интерфейс с большей функциональностью.
$zip = new ZipArchive();
if ($zip->open('archive.zip') === TRUE) {
$stat = $zip->statIndex(0);
echo "Размер файла: " . $stat['size'] . " байт";
$zip->close();
}Функция из старого расширения Zip, возвращает массив со статистикой о записи.
$zip = zip_open('archive.zip');
$entry = zip_read($zip);
$stat = zip_stat($entry);
echo "Размер файла: " . $stat['size'] . " байт";Рекомендуется использовать ZipArchive, так как оно активно поддерживается и предоставляет больше возможностей.
Zip entry filesize в Python
Используется модуль zipfile. Свойство file_size объекта ZipInfo.
import zipfile
with zipfile.ZipFile('archive.zip', 'r') as zf:
info = zf.getinfo('file.txt')
print(f"Размер файла: {info.file_size} байт")Размер файла: 1500 байт
В Node.js можно использовать модуль adm-zip.
const AdmZip = require('adm-zip');
const zip = new AdmZip('archive.zip');
const entry = zip.getEntries()[0];
console.log(`Размер файла: ${entry.header.size} байт`);Zip entry filesize в MySQL
Прямого аналога для работы с ZIP-архивами в MySQL нет. Архивация обычно выполняется на уровне файловой системы или средствами языка программирования.
Ошибка возникает при передаче параметра, не являющегося ресурсом записи архива.
$size = zip_entry_filesize('not_a_resource'); // WarningWarning: zip_entry_filesize() expects parameter 1 to be resource, string given
Попытка использования ресурса после вызова zip_close().
$zip = zip_open('archive.zip');
$entry = zip_read($zip);
zip_close($zip);
$size = zip_entry_filesize($entry); // Некорректное поведениеРезультат может быть непредсказуемым, возможно возвращение false.
Отсутствие проверки успешности открытия архива.
$zip = zip_open('nonexistent.zip');
$entry = zip_read($zip); // false
$size = zip_entry_filesize($entry); // WarningWarning: zip_entry_filesize() expects parameter 1 to be resource, boolean given
Расширение Zip, в которое входит функция zip_entry_filesize, считается устаревшим с PHP 7.4.0. Официальная документация рекомендует использовать расширение ZipArchive.
В PHP 8.0.0 расширение Zip по-прежнему доступно, но не рекомендуется к использованию. Функция zip_entry_filesize() продолжает работать, но ее сигнатура и поведение не претерпели изменений по сравнению с PHP 7.
Важное замечание: ресурсы (resource) в PHP 8 были заменены на объекты (objects) для некоторых типов, но для устаревшего расширения Zip это не привело к изменениям в работе функции.
$zip = zip_open('archive.zip');
if (is_resource($zip)) {
while ($entry = zip_read($zip)) {
$name = zip_entry_name($entry);
$original = zip_entry_filesize($entry);
$compressed = zip_entry_compressedsize($entry);
$ratio = round(($original - $compressed) / $original * 100, 2);
echo "Файл: $name | Оригинал: $original байт | Сжат: $compressed байт | Экономия: $ratio%
";
}
zip_close($zip);
}Файл: data.txt | Оригинал: 5000 байт | Сжат: 1500 байт | Экономия: 70%
$minSize = 1024; // 1 КБ
$maxSize = 10240; // 10 КБ
$zip = zip_open('archive.zip');
if (is_resource($zip)) {
while ($entry = zip_read($zip)) {
$size = zip_entry_filesize($entry);
if ($size >= $minSize && $size <= $maxSize) {
$name = zip_entry_name($entry);
echo "Подходит: $name ($size байт)
";
}
}
zip_close($zip);
}$zip = zip_open('archive.zip');
if (is_resource($zip)) {
while ($entry = zip_read($zip)) {
if (zip_entry_filesize($entry) < 100000) { // Файлы меньше 100 КБ
if (zip_entry_open($zip, $entry, "r")) {
$content = zip_entry_read($entry, zip_entry_filesize($entry));
echo "Содержимое файла " . zip_entry_name($entry) . ":
";
echo htmlspecialchars($content) . "
";
zip_entry_close($entry);
}
}
}
zip_close($zip);
}