2012-01-18 70 views
0

我有一個大型的xml文件內存數組作爲字符串。將內存中的PHP數組壓縮爲.tar.gz文件(PHAR?)

我正在尋找從PHP(5.3)創建可讀/可提取.tar.gz文件的最有效方法。

當前我使用的是this class

但是:

  • 它看起來並不保持
  • 它要求文件(所以我創造數以千計的文件從我的記憶陣列是無用的幾毫秒後)

所以我正在尋找一種處理.tar.gz文件的有效方法,最重要的一點是能夠使用一個簡單的命令輕鬆地將文件放入其中:

$ myArchive-> putFi leFromString($ fileName,$ dataString);

看起來像是可以配置PHAR與TAR & GZ,所以它可能是一個解決方案?

$p = $p->convertToExecutable(Phar::TAR, Phar::GZ); 

獎金的問題,我不知道這是否會更好地建設它生活(每個XML字符串後一代)以節省內存,或只是等待這個龐大的對象&敷一次。在這種情況下,proc_usage/mem_usage的比例不清楚。

目標最大使用量是100K XML文件。

謝謝!

+2

爲什麼不使用[zlib的(http://php.net/manual/en/book.zlib.php)和如果你需要某些功能,將它包裝在一個類中? – afuzzyllama 2012-01-18 15:39:51

+0

我對這個問題不是很清楚。你想將所有的xml文件保存到一個tar.gz文件中,但是也可以添加新的文件?你能舉一些例子嗎? – Rannnn 2012-01-19 11:08:48

+0

@afuzzyllama:zlib用於.gz文件,它只壓縮一個文件。您需要首先查找所有單個文件,然後才能在其上使用zlib。 – cweiske 2012-02-20 11:54:46

回答

0

如果您想創建tgz文件,請使用PEAR的Archive_Tar包。它可以讓你從內存中動態創建的tar + GZ文件:

require_once 'Archive/Tar.php'; 
$t = new Archive_Tar('/path/to/dest.tar.gz', 'gz'); 
foreach ($xmlfiles as $key => $content) { 
    $t->addString($key . '.xml', $content); 
} 
2

這是一個有點晚了,但以供將來參考:

可以使用從該PharData類創建tar.gz壓縮phar擴展。這是一個有點像ZipArchive,但您可以使用陣列接口添加內容:

$archive = new PharData("outfile.tar"); 
foreach ($xmlfiles as $name => $data) { 
    $archive[$name] = $data; 
} 

// compress to "outfile.tar.gz 
$gzipped = $archive->compress(Phar::GZ); 

// delete outfile.tar 
unset($archive); 
unlink("outfile.tar"); 
+0

但是爲了使這個工作'phar.readonly'必須在php.ini文件中設置爲0(off)。您會發現許多主機將此值設置爲1,無法禁用它,從而無法使用phar來壓縮文件。 – jahu 2015-01-26 09:47:51

相關問題