2012-12-07 63 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是假設工作在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");(這是建議,但將工作)
+0

謝謝您的回答。這個檔案是用PharData :: adfFile和PharData :: addEmptyDir函數創建的。使用'exec'函數對我來說不是一種選擇,因爲它不安全。 – scrutari

+0

你真的應該看看int Archive_Tar。 PharData非常挑剔,我只是不喜歡它 – cegfault

+0

@cegfault你能告訴我爲什麼使用exec()不推薦? – gen

相關問題