【问题标题】:PHP ZIP creating subfolders as filesPHP ZIP将子文件夹创建为文件
【发布时间】:2013-09-25 11:49:33
【问题描述】:

我有一些 PHP 代码用于尝试压缩文件夹。该文件夹中有两个子文件夹和几个单独的文件。

这里是代码:-

<?php

    $src = $_POST['srcin'];
    $dst = $_POST['dstin'];

    $zip = new ZipArchive;
    $zip->open($dst, ZipArchive::CREATE);
    if (false !== ($dir = opendir($src)))
         {
             while (false !== ($file = readdir($dir)))
             {
                 if ($file != '.' && $file != '..')
                 {
    $ans = DIRECTORY_SEPARATOR;
                           $zip->addFile($src.DIRECTORY_SEPARATOR.$file);
                 }
             }
         }
         else
         {
             die('Can\'t read dir');
         }
    $zip->close();

    echo json_encode('Folder Compressed');

?> 

输入值为:-

srcin = "测试文件夹" dstin = "TestFolder.zip"。

发生的事情是我得到一个 zip 文件。但是,子文件夹被创建为文件。

我从这个论坛中搜索到有关如何压缩文件夹的上述代码,但我看不到有关子文件夹未正确压缩的任何内容。

非常感谢任何帮助。

谢谢

马丁

【问题讨论】:

  • 从外观上看,它不会检查$src 下的任何内容是否是文件夹/目录并采取相应措施。也许创建一个可能的递归函数并检查$file 是否是一个目录,如果是,则将其传递给函数以读取它。递归将是我的建议,因此您也可以将$src 传递给该函数。我无法用任何代码创建答案,因为您没有说明您使用的是什么库,所以我无法对其进行测试。

标签: php zip directory


【解决方案1】:

在向其中添加文件之前,您应该使用addEmptyDir 创建一个目录。

Here 是一个示例(参见顶部评论)如何递归地归档目录

【讨论】:

  • 我已经尝试了该链接上的一些示例。似乎标有描述“这是一种基于堆栈的压缩目录的方法。没有递归,没有函数,没有类:”的示例似乎有效。虽然我从 PHP 中得到一个错误。天知道为什么。
  • 我从 AJAX 调用 PHP 使用代码错误:function (xhr, ajaxOptions, throwedError) { alert("ZIP" + xhr.status);警报(抛出错误);我得到两个弹出窗口。第一个有 200 个,第二个说“JSON Parse,数据意外结束”我已经做 PHP 大约 20 个小时了。
  • 现在也修复了错误。我使用了 echo json_encode 而不仅仅是 echo。
猜你喜欢
  • 2017-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2013-07-10
  • 2022-11-07
  • 2021-05-16
  • 1970-01-01
相关资源
最近更新 更多