繁体   English   中英

将zip://包装器用于单个名称未知的文件的存档

[英]Using the zip:// wrapper for an archive with a single file whose name is unknown

PHP允许使用zip:// 包装器即时读取ZIP文件:

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

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

是否可以告诉包装程序打开存档中的第一个文件,而没有文件名?

我知道我可以使用ZipArchive或Zip Functions ,我只是想保持简单并尽可能使用流包装器。

在浏览包装器的源代码后,我找到了问题的答案。

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


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM