使用 php ZipArchive 创建 zip 文件时保留符号链接

问题描述 投票:0回答:1

我正在使用 ZipArchive 从包含我要保留的符号链接的目录构建存档。结构示例:

-- file1
-- file2
-- directory/file3 --> ../file1

当我执行下面的代码时,

directory/file3
出现在存档中,但它不是符号链接,而是具有
file
的内容。虽然它有效,但我想保留大量链接以保持较小的存档大小。

    $zip = new ZipArchive();
    $zip->open($zipFile, ZipArchive::CREATE | ZipArchive::OVERWRITE)

    foreach($filesToZip as $name => $file) {
        if (!$file->isDir()) {
            $filePath = $file->getPathname();
            $relativePath = substr($filePath, strlen($rootPath) + 1);
            $zip->addFile($filePath, $relativePath);
        }
    }

    $zip->close();

您会推荐什么解决方案?

我还尝试使用

file->getRealPath()
,这只会使问题变得更糟,因为它将文件及其绝对路径添加到存档中。

php zip
1个回答
0
投票

符号链接本质上是一个文本文件,其内容是目标路径,文件本身会有一个模式标志

l

原理很简单,但是涉及到的功能有点复杂:

if(is_link($filePath)) {
    $targetPath = readlink($filePath);
    $stat = lstat($filePath);
    $zip->addFromString($relativePath, $targetPath);
    $zip->setExternalAttributesName($relativePath,
                                    ZipArchive::OPSYS_UNIX, $stat['mode'] << 16);
}
© www.soinside.com 2019 - 2024. All rights reserved.