使用PHP从ZIP文件中删除空目录

4

PHP提供了一个用于ZIP文件操作的。它还允许使用addEmptyDir()创建目录,并使用deleteName()删除条目。但是,删除不适用于目录(无论是否为空)。有没有办法删除ZIP文件中的空文件夹(最好使用内置的PHP功能)?


不确定这是否会有所不同,但您尝试过deleteIndex()函数了吗? - defines
3个回答

1

您需要在目录名称后面添加/。因此,以下内容可以正常工作:

<?php
    $zip = new ZipArchive;
    if ($zip->open('test.zip') === TRUE) {
        $zip->deleteName('testDir/');
        $zip->close();
    }
?>

所以,testDir/ 和 testDir 有什么区别呢?


注意:我已经更新了官方文档,并提供了像这样的示例,同时向扩展程序维护者请求澄清。 - Philip Olson
deleteName() 函数似乎存在更多问题:如果您尝试删除非空目录,它会返回 True,但不会将其删除。另外,对于目录,locateName() 函数也只能使用尾部斜杠。 - desolat

0
你可以将它提取到一个临时目录,使用rmdir()删除任何空目录,然后将其重新压缩。另外要检查的一件事是权限。你确定你有操作文件所需的写入权限吗?

0

关于目录概念的小笔记。实际上并不存在所谓的目录。例如:foo/a.txt 和 foo/b.txt 是两个条目,但是并没有 foo/ 目录。不过,可以创建一个名为 foo/ 的条目来“模拟”一个目录。

删除方法返回 true 而未删除任何内容看起来像是一个 bug,我已经要求 Philip 在 http://bugs.php.net 上开一个新的 bug,以便我能尽快修复它。

谢谢!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接