2012-12-07 5 views
4

PHP를 사용하여 .tar 아카이브를 추출하려고합니다. 나는 그런 코드를 사용하고 :PHP로 빈 디렉토리가있는 tar 아카이브를 추출합니다. PharData

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

을 내 아카이브가 언급 한 코드에 의해 추출되지 않는 빈 디렉토리 욕실이 포함되어있는 경우 그것은 잘 작동하지만 . 그래서, 내 .tar 파일은이 구조가있는 경우 :

[email protected]:~/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 

내가 개봉 후 얻을 :

[email protected]:~/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

test.tar은 명령 행에서 tar -cf test.tar ...을 사용하여 생성되었습니다. PHP의 Phar 라이브러리는 phar 아카이브, 은 아니고tar 아카이브를 의미합니다.

PHP Manual은 phar, tar 및 zip 간의 차이점을 보여줍니다. 필자는 PharData가 이고 타르 아카이브에서이 작동한다고 가정하므로 PHP 개발자는 report this as a bug 일 수 있습니다.

지금은

당신은 PHP에서 tar 아카이브를 추출 할 경우, 당신은 세 가지 옵션이 있습니다

  1. 는 PHP에서 Phar 라이브러리를 사용하여 아카이브를 만든 다음
  2. 사용 Pear's Archive_Tar (PHP에서 추출을하는 tartar.gz 파일에서 작동합니다. (권장되지,하지만 작동합니다)
  3. 전화 exec("tar -xf test.tar -C /home/user/newtest");
+0

는 답변 주셔서 감사합니다. 이 아카이브는 PharData :: adfFile 및 PharData :: addEmptyDir 함수로 생성되었습니다. 'exec'기능을 사용하는 것은 안전하지 않으므로 나를위한 옵션이 아닙니다. – scrutari

+0

정말 Archive_Tar int를 봐야합니다. PharData는 매우 까다롭기 때문에 나는 그것을 좋아하지 않습니다. – cegfault

+0

@cegfault 왜 exec()를 사용하지 않는 것이 좋을지 말해 주시겠습니까? – gen