使用zip://包装器作为一个带有单个文件的存档,其名称未知



php允许使用zip://包装器读取zip文件:

$fp = fopen ('zip://archive.zip#dir/file.txt', 'rb');

都很好,当您知道压缩文件名时。这不是我的情况:我的应用必须处理包含一个文件的zip档案,其名称在打开档案之前是未知的。

是否有一个选项告诉包装器在存档中打开第一个文件,而没有文件名?

我知道我可以使用ziparchive或zip函数,我只是想保持简单,并在可能

我在挖掘包装器的源代码后找到了问题的答案。

目前无法在不提供文件名的情况下使用包装器打开档案。


一种解决方案涉及使用包装器和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');
        // ...
    }
}

最新更新