【问题标题】:Using PHP recursively unzip a folder within a zipped folder?使用PHP递归解压缩压缩文件夹中的文件夹?
【发布时间】:2017-01-03 10:40:33
【问题描述】:

我正在尝试在 PHP 中解压缩一个文件夹并对这些文件进行一些处理。我让它正常工作,但我需要对压缩文件夹根目录内的压缩文件夹进行这项工作。

所以 zipped1 可能包含 image1 和 zipped2。我还需要提取 zipped2。我试图通过递归来做到这一点,如下所示。显然这不是完整的代码,而是相关的部分。

$tempFile = $_FILES['Filedata']['tmp_name'];
function handle_zip($ZipHandler)
{
  while($zip_entry = zip_read($ZipHandler))
  {
   $ext = explode(".",zip_entry_name($zip_entry))[1];
   if($ext=="zip")
    handle_zip(zip_open($zip_entry));
  }
}
$ZipHandler = zip_open($tempFile);
handle_zip($ZipHandler);
zip_close($ZipHandler);

所以问题是递归调用函数需要将文件作为参数发送,但 zip_open 似乎在服务器上的临时文件夹中打开上传的文件 - 而这个递归参数不在该临时文件夹中。

请问我该怎么办?

【问题讨论】:

    标签: php recursion unzip extraction compression


    【解决方案1】:

    这个我没试过,你可以试试

    zip_entry_open($zip_entry,$entry);
    handle_zip(zip_open($entry));
    

    在递归调用中。 This 是相关的文档页面。

    此外,您可能希望获得分解结果的最后一部分而不是第二部分,以防文件名称中有多个点,或者没有。

    【讨论】:

    • 谢谢,但不行。尝试在 while 循环中读取时出现错误 1。