【问题标题】:how to create a zip file from a folder - php如何从文件夹创建 zip 文件 - php
【发布时间】:2017-01-17 19:30:28
【问题描述】:

我有问题。

我在互联网上搜索了一个解决方案,但没有一个效果很好。我正在尝试制作一个脚本,该脚本将从文件夹中获取文件并将它们放入 zip 存档中。 但它不起作用..

我尝试了不同的路径,但只有我自己搞混了,什么都没有。

这是我认为最简单的当前代码,应该可以工作,但不这样做..

你能帮帮我吗?

function archivebackup(){
    $zip = new ZipArchive;
    if ($zip->open('Mail.zip', ZipArchive::CREATE) === TRUE){

        foreach (new DirectoryIterator('Mails/') as $fileInfo) {
            $fileName = $fileInfo->getFilename();
            // echo $fileName ."<br>";
            $zip->addFile($fileName);
        }   

        $zip->close();
    } 
}

【问题讨论】:

  • 您收到了哪些错误消息?它在什么方面不起作用?
  • 第一个也是显而易见的问题,您是否在 PHP 中启用了 zip 支持?
  • 我没有错误。该脚本不会向存档添加任何内容。而且我知道程序会检索文件的名称。
  • 鉴于您将 Mails/ 传递给您的 DirectoryIterator 构造函数,您可能还需要在文件名前加上该路径。 $zip-&gt;addFile('Mails/'.$fileName);
  • 我没有在 php.ini 中启用任何东西。但我不知道我必须这样做。如果我给出示例“addFile(”1.txt)”,则此代码有效。但是,当我想在循环中执行所有操作时,它不起作用。

标签: php file zip archive


【解决方案1】:

您的当前工​​作目录中似乎没有包含文件,getFilename() 只返回一个没有路径的文件名。

执行以下操作:

function archivebackup(){
    $zip = new ZipArchive;
    if ($zip->open('Mail.zip', ZipArchive::CREATE) === TRUE){

        foreach (new DirectoryIterator('Mails/') as $fileInfo) {
            if (in_array($fileInfo->getFilename(), [ ".", ".." ]) { continue; }
            $fileName = $fileInfo->getPathname();
            $zip->addFile($fileName);
        }   

        $zip->close();
    } 
}

【讨论】:

  • 你太棒了!谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-25
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 2013-07-10
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多