0

下面的代码成功创建了一个指定目录和所有子目录的 zip 文件。我遇到的问题是最终结果从根目录中的每个文件名和文件夹名中删除了第一个字符;在子目录中不会发生相同的行为。

<?php
    require('../config/config.php');

    $rootPath = $abs_path.'/includes/qrcodes/'; // SOURCE FOLDER TO ZIP
    $zipFilename = 'qr_images.zip';
    $zip = new ZipArchive();
    $zip->open($zipFilename, ZipArchive::CREATE | ZipArchive::OVERWRITE);

    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($rootPath), RecursiveIteratorIterator::LEAVES_ONLY);

    foreach ($files as $name => $file)
    {
        $filePath = $file->getRealPath();
        $relativePath = substr($filePath, strlen($rootPath) + 1);

        if (!$file->isDir())
        {
            $zip->addFile($filePath, $relativePath);

        }else {

            if($relativePath !== false)
                $zip->addEmptyDir($relativePath);
        }
    }

    $zip->close(); 
?>

目前生成的 zip 文件包括:

  • adios(文件夹)
    • radio_1.png
    • radio_2.png
  • nfosys(文件夹)
    • infosys_1.png
  • ehicles(文件夹)
    • 车辆_1.png
    • 车辆_2.png

这些文件夹应命名为“radios”、“infosys”和“vehicles”。

4

1 回答 1

0

该代码似乎是为没有尾随反斜杠的 $rootpath 变量设计的。如果您要更改它$rootPath = $abs_path.'/includes/qrcodes';,则需要 substr 处的 +1。否则,相对路径将以“/”开头。

于 2020-05-22T14:41:54.213 回答