【问题标题】:PHP Zipped contents appearing in "_" underscore directory\"_\" 下划线目录中出现的 PHP 压缩内容
【发布时间】:2022-12-20 00:54:32
【问题描述】:

我正在尝试将一系列文件压缩到一个没有任何目录的 zip 文件中。只是文件。问题是生成的 Zip 文件包含名为 _ 的目录中的所有文件。我不知道这个目录来自哪里。这是我创建 Zip 文件的代码:

$zip = new ZipArchive();
$zip->open($filepath, ZipArchive::CREATE);
$files = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($tempPath),
    RecursiveIteratorIterator::LEAVES_ONLY
);
/** @var SplFileInfo $file */
foreach ($files as $file) {
   if (!$file->isDir()) {
        $zip->addFile($file->getRealPath(), basename($file->getFilename()));
   }
}
zip->close();

我认为 $file->getFilename() 足以将文件放在 zip 文件的根级别,但添加了 basename 因为那不起作用。我无法将文件放在 zip 文件的根目录中,也无法创建目录 _ 来放入它们。不知道下划线目录来自哪里。

如果它有所不同,文件是从通过符号链接链接的位置获取的。在 Ubuntu 服务器上。

任何人都知道发生了什么以及如何解决它?

Here's an example of the output zip file. 有趣的是,在 Google 的预览中它看起来是正确的,但如果你在 zip 查看器(如 Windows 的默认提取器或 7zip)中打开它,文件都在 _ 目录中。

我在一个名为 Anki 的应用程序中使用这些 zip,看起来这个应用程序也在子目录中检测到它们。这里出了点问题,但我无法弄清楚是什么......

【问题讨论】:

  • $filepath的价值是多少
  • 它类似于/path/storage/directory/app/。这是保存 zip 文件的地方。它在该位置正确保存。它只是没有将文件正确插入到 zip 文件的根目录中。
  • 很抱歉问,但是,你有没有检查所涉及的变量的值(使用步骤调试器或普通的var_dump()),尤其是。 basename($file->getFilename()),并将它们与实际输出进行比较?
  • 是的,我确实调试了它,basename($file->getFilename()) 只给出了文件名,没有任何路径或子目录。
  • 另一个猜测...您如何检查生成的 ZIP 文件? _ 根级目录是否可能是某些 GUI 程序的抽象?您可以在问题中添加屏幕截图吗?

标签: php zip


【解决方案1】:

您需要提供输出文件名。

'/path/storage/directory/app/myZipfile.zip'

这段代码对我来说工作正常。它给了我一个只有文件的 zip 文件,里面没有子文件夹

$filepath = dirname(__FILE__ );
$tempPath = $filepath . "/objects";
$zip = new ZipArchive();

$zip_opened = $zip->open( $filepath . "/test.zip", ZipArchive::CREATE | ZipArchive::OVERWRITE );

if( $zip_opened == true )
{
    $files = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $tempPath ), RecursiveIteratorIterator::LEAVES_ONLY );
    foreach( $files as $file )
    {
        if( !$file->isDir() )
        {
            $zip->addFile( $file->getRealPath(), basename( $file->getFilename() ) );
        }
    }
    $zip->close();
} else {
    var_dump( "Could not open zip file" );
}

【讨论】:

  • 谢谢,但我不明白这与问题有什么关系。我提供了一个有效的输出文件名并且 zip 文件被正确输出。它的 zip 文件的内容被错误地放置在不应该存在的子目录中。
  • 我编辑了上面的帖子。适合我
  • 我也不知道这个答案试图说明什么。问题中的代码没有任何明显的缺陷。
【解决方案2】:

这个问题有什么解决办法吗?我在 ubuntu 服务器上遇到了同样的问题,但同样在 Windows 机器上工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-07
    • 2011-06-10
    • 1970-01-01
    相关资源
    最近更新 更多