【问题标题】:PHP: Creating a tar archive containing symlinks and empty directoriesPHP:创建包含符号链接和空目录的 tar 存档
【发布时间】:2020-08-07 00:41:50
【问题描述】:

我想要一个简单的 PHP 脚本(没有外部依赖项),它能够创建目录的逐字存档。此目录可以包含任何有效的内容,包括空目录和损坏的符号链接。

输入目录如下:


.:
total 12
-rw-r--r--  1 101633 1014 1502 Apr 23 17:21 a.php
drwxr-xr-x  2 101633 1014    6 Apr 23 16:10 empty-directory
-rw-r--r--  1 101633 1014    0 Apr 23 15:52 emtpy-file
-rw-r--r--  1 101633 1014    7 Apr 23 15:52 file-w-contents
drwxr-xr-x  2 101633 1014   18 Apr 23 16:39 nonempty-dir
drwxr-xr-x  2 101633 1014    6 Apr 23 15:52 symlink-target-dir
lrwxrwxrwx  1 101633 1014   18 Apr 23 16:12 symlink-to-dir -> symlink-target-dir
lrwxrwxrwx  1 101633 1014   10 Apr 23 16:14 symlink-to-emtpy-file -> emtpy-file
lrwxrwxrwx  1 101633 1014   11 Apr 23 16:25 symlink-to-nonexistent -> nonexistent

./empty-directory:
total 0

./nonempty-dir:
total 0
-rw-r--r-- 1 101633 1014   0 Apr 23 16:39 file

./symlink-target-dir:
total 0

对此的“官方”解决方案是使用 Phar,但它省略了符号链接和空目录,并在损坏的符号链接上引发异常(看起来它希望默认遵循它们 - 我发现无法禁用此行为)。

$phar = new PharData('output.tar');                                                                                                                                                                                                                                                                                           
$phar->buildFromDirectory("/z");

结果:

Fatal error:  Uncaught RuntimeException: phar error: unable to open file "symlink-to-nonexistent" to add to phar archive in /z/a.php:9

删除悬空符号链接后,将创建以下 tar 文件:

-rw-r--r-- 0/0            1502 2020-04-23 17:37 a.php
-rw-r--r-- 0/0               0 2020-04-23 17:37 emtpy-file
-rw-r--r-- 0/0               7 2020-04-23 17:37 file-w-contents
-rw-r--r-- 0/0               0 2020-04-23 17:37 nonempty-dir/file
-rwxr-xr-x 0/0               0 2020-04-23 17:37 symlink-target-dir

(请注意,包含了空的 'symlink-target-dir',尽管不是作为目录,而是作为常规文件。)

是否有人知道一个小型独立库,它能够创建适当的 tar 存档,包括所有目录和链接?

【问题讨论】:

  • 您是否尝试过Follow Symlinks 选项或using a custom iterator?检查这个如何include empty directories
  • @msg 我无法手动添加空目录,因为 phar->addEmptyDir() 需要将 phar.readonly 设置为 0,这是我无法做到的(此脚本应在任何环境中工作,无论PHP 设置)。 Re:links,我在 Phar 中没有看到任何添加符号链接的方法,所以我不知道自定义迭代器将如何帮助我。

标签: php tar phar


【解决方案1】:

因为我没有找到任何可以满足我需求的东西,所以我决定创建自己的版本。

可通过https://github.com/koszik/php-tar 获取

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-20
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2012-04-30
    • 2014-12-10
    相关资源
    最近更新 更多