2011-09-26 43 views
1

有一個函數,你可能知道gzfile「讀取整個gz文件到一個數組」,你怎麼能做到這一點與bz2?謝謝!如何讀取bz2文件作爲數組與PHP

+0

你能澄清嗎?你是否想將解壓後的內容讀入數組?或者壓縮文件本身(在這種情況下你會使用標準I/O)?你需要在PHP中進行解壓縮,在這種情況下,你需要找到/寫入bz2算法,或者你可以使用庫或命令行工具? – Robert

+0

是的,我想解壓縮內容到數組中,就像gzfile函數,但對於bz2文件,無所謂只需要一些想法,謝謝 – Santiago

回答

2

沒有內置功能。

你可以做這樣的事情(添加一些完整性檢查等):

function bzfile($filename){ 
    $p = popen('bunzip2 -c ' . $filename, 'r'); 
    $a = array(); 
    while($a[] = fgets($p); 
    return $a; 
} 

這裏假設安裝有bunzip2命令二進制類Unix操作系統。它在你的文件上運行buznip2。 -c選項的意思是「發送未壓縮的數據到標準輸出而不是影響文件在磁盤上)。該輸出的行爲就像一個文件句柄,所以你可以在它上面讀取行。

編輯:有an extension提供一些內置BZ2的功能,不過遺憾的是,沒有bzfile()如果bzip2的擴展是在你的環境中使用,你可以把上面的一樣:

function bzfile($file){ 
    $fp = bzopen('foo.bz2','r'); 
    $a = array(); 
    while ($a[] = fgets($fp)); 
    return $a; 
} 

這不會需要UNIX環境中或安裝bunzip2命令二進制文件。

(注意:這一切都假定bzip文件是文本,並且不包含二進制數據,s因爲你想要替換文件())

+0

我確實包含二進制數據我得到警告:fgets()期望參數1是資源,布爾給予我gues我需要首先提取內容,然後運行你的功能 – Santiago