PHP: создание tar-архива, содержащего символические ссылки и пустые каталоги - PullRequest
0 голосов
/ 23 апреля 2020

Мне бы хотелось иметь простой 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, включающий все каталоги и ссылки?

1 Ответ

0 голосов
/ 23 апреля 2020

Поскольку я не нашел ничего, что могло бы удовлетворить мои потребности, я решил создать свою собственную версию.

Она доступна на https://github.com/koszik/php-tar

...