PHP:创建一个包含符号链接和空目录的tar归档文件

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

我想要一个简单的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存档吗?

我想要一个简单的PHP脚本(无外部依赖项),该脚本能够创建目录的逐字存档。该目录可以包含任何有效内容,包括空目录...

php tar phar
1个回答
0
投票

由于找不到任何满足我需求的内容,所以我决定创建自己的版本。

© www.soinside.com 2019 - 2024. All rights reserved.