Если вы хотите найти содержимое каждого файла, распаковка должна произойти, несмотря ни на что. Это может не произойти в формате на диске, но где-то произойдет, например, в памяти. Просто к вашему сведению, вот как работают сжатые файлы.
Я бы отказался от класса OOP ZipArchive
, это случайный факт, существует ли метод, соответствующий функции -
Если вы хотите найти содержимое файла, вам нужно передать количество байтов в качестве второго параметра в zip_entry_read()
для соответствующей записи. Чтобы получить количество байтов, вызовите zip_entry_filesize
$zip = zip_open('./file.zip');
while ($entry = zip_read($zip)) {
// This is the uncompressed size
$true_size = zip_entry_filesize($entry);
// Read everything
$true_entry = zip_entry_read($entry, $true_size);
$idx = mb_strpos($true_entry, 'string-you-are-looking-for');
if ($idx) {
echo 'Found!';
}
}
Переменная $true_entry
внутри l oop будет отдельным файлом, и вы можете получить его имя, используя zip_entry_name
.