使用php PharData使用空目录提取tar存档

时间:2012-12-07 18:53:31

标签: php phar archive-tar

我正在尝试通过PHP提取.tar存档。 我正在使用这样的代码:

$phar = new PharData('test.tar');
$phar->extractTo('/home/user/newtest');

它工作正常,但如果我的存档包含空目录,则不会被提到的代码提取。所以,如果我的.tar文件具有以下结构:

user@computer:~/test$ tar -tvf test.tar
drwxrwxr-x user/user         0 2012-12-07 22:35 dir1/
-rw-rw-r-- user/user       798 2012-10-28 23:41 dir1/articles.txt
drwxrwxr-x user/user         0 2012-12-07 22:35 emptyDir/
-rw-rw-r-- user/user       834 2012-09-15 22:47 main.html

我解压后得到了:

user@computer:~/newtest$ ls -l
drwxrwxr-x 2 user user 4096 Dec.   7 22:35 dir1
-rw-rw-r-- 1 user user  834 Sep.  15 22:47 main.html

因此,空的'emptyDir'未被提取

有谁知道如何修复它?

提前感谢您的任何帮助!

1 个答案:

答案 0 :(得分:1)

看起来test.tar是在命令行上使用tar -cf test.tar ...创建的。 PHP的Phar库旨在阅读phar档案,不是 tar档案。

PHP Manual显示了phar,tar和zip之间的差异。当然,PharData 假定处理tar档案,因此您可能希望report this as a bug给PHP开发人员。

目前,如果要在PHP中提取tar存档,则有三种选择:

  1. 使用PHP中的Phar库创建存档,然后使用PHP提取
  2. 使用Pear's Archive_Tar(适用于tartar.gz个文件)。
  3. 致电exec("tar -xf test.tar -C /home/user/newtest");(建议,但会有效)