Использование оболочки zip:// для архива с одним файлом, имя которого неизвестно
PHP позволяет читать файлы ZIP на лету с zip://
обертка:
$fp = fopen ('zip://archive.zip#dir/file.txt', 'rb');
Все хорошо, когда вы знаете имя сжатого файла. Это не мой случай: мое приложение должно иметь дело с ZIP-архивами, содержащими один файл, имя которого неизвестно до открытия архива.
Есть ли возможность указать оболочке открыть первый файл в архиве без имени файла?
Я знаю, что могу использовать ZipArchive или Zip Functions, я просто хотел бы сделать это простым и использовать потоковую обертку, если это возможно.
1 ответ
Решение
Я нашел ответ на свой вопрос после того, как покопался в исходном коде обертки.
В настоящее время нет способа открыть архив с помощью оболочки без указания имени файла.
Решение включает использование как оболочки, так и ZipArchive
:
$path = '/path/to/archive.zip';
$zip = new \ZipArchive();
if ($zip->open($path) === true) {
if ($zip->numFiles === 1) {
$compressedFileName = $zip->statIndex(0)['name'];
$zipPath = 'zip://' . $path . '#' . $compressedFileName;
$fp = fopen($zipPath, 'rb');
// ...
}
}