如果你曾為你的UNIX系統下載過widget,那麼你肯定遇到過TAR壓縮檔。在UNIX系統中磁帶歸檔檔案格式常用於打包多個檔案,以便於分發kvm。
這種格式的流行不僅由於在所有UNIX系統中都存在該格式的建立工具,還因為在實際應用中,它便於儲存歸檔檔案的目錄結構、許可資訊、使用者和組資訊等寫字樓。
PHP中有大量的內建函數和可串連的擴充庫,可用於幾乎所有檔案格式。特別是筆記本維修它可以通過PEAR的Archive_Tar類讀取和建立TAR文檔。在本文中,我們將向你說明這個類的行為,並示範開發人員是如何利用它動態地建立,編輯和顯示TAR文檔。
在這裡我將假設你有一個工作資料庫和安裝了PHP,並且正確的安裝了PEAR的Archive_Tar類。
註:你可以直接從網上安裝PEAR 的Archive_Tar類包,或者從網上下載安裝。
建立TAR文檔
讓我們從一個簡單的例子開始:動態建立包含幾個檔案的TAR文檔。使用下面的指令碼:
列表 A
<php
include ('Archive/Tar.php');// import class
$obj = new Archive_Tar('dummy.tar'); // name of archive
$files = array('mystuff/ad.gif',
'mystuff/alcon.doc',
'mystuff/alcon.xls'); // files to store in archive
if ($obj->create($files)) {
echo 'Created successfully!';
} else {
echo 'Error in file creation';
}
>
這個指令碼相當簡單,但是還是值得具體看一下:
首先,建立Archive_Tar類的一個執行個體,初始化建立文檔的路徑和檔案名稱。在本例中,檔案名稱是dummy.tar,存於目前的目錄北京電磁爐。
其次,列出歸檔的所有檔案,包括它們的磁碟地址,存於一個PHP數組中。指令碼(更準確的說是運行指令碼的使用者)必須擁有訪問這些磁碟地址的許可權,否則文檔建立過程就會失敗。
最後,creat()方法將所有的檔案壓縮到單個TAR文檔。這個方法接受輸入的檔案名稱數組,返回一個布爾值表明文檔是否成功建立。記住指令碼必須擁有將檔案寫入命名磁碟地址的許可權,否則,creat()方法就無法使用,文檔建立就會失敗華泰聖達菲。
應用上面例子中的指令碼,修改$files數組的內容以反映你的本地系統配置,在命令列或者瀏覽器中試著執行它,如果一切正常的話,指令碼將會尋找並讀取這些檔案到一個命名為dummy.tar的TAR文檔中。
查看TAR文檔內容
如何查看已經存在的TAR檔案的內部資訊呢?Archive_Tar類有一個listContent()方法,該方法可以查看一個TAR包中的每個組件的詳細資料。列表B顯示了如何使用它:
列表 B
<php
include ('Archive/Tar.php');// import class
$obj = new Archive_Tar('dummy.tar'); // name of archive
$files = $obj->listContent();// array of file information
foreach ($files as $f) {
foreach ($f as $k => $v) {
echo "$k: $vn";
}
echo "n";
}
>
listContent()方法的輸出是一個結構化數組,溫度控制器每個數組元素代表文檔中的一個檔案。典型的是,每個元素有相應檔案的名字資訊,它的許可模式,所有者和組使用者的ID,狀態,大小和上一次修改的時間。通過一個迴圈可以很容易的提取這些資訊,然後再對格式稍作修改使它根據表達性,像上面的例子中提到的。下面是一個輸入樣本:
校正和:3872
檔案名稱:mystuff/alcon.doc
模式:33206
使用者ID:433
組ID:106
大小:41472
時間:1140358031
向已經存在的TAR文檔中添加檔案
由於我們大家的健忘性國內旅遊,有時可能忘記某個檔案,Archive_Tar 類通過add()方法提供了
向已經存在的文檔中添加新檔案的能力。為了示範,我們再回到上文的dummy.tar文檔,試著給它添加一個新檔案(列表C):
列表C
<php
include ('Archive/Tar.php');// import class
if (file_exists('dummy.tar')) {
$obj = new Archive_Tar('dummy.tar'); // name of TAR file
} else {
die('File does not exist');
}
$files = array('otherstuff/logo.gif',
'otherstuff/header.gif',
'morestuff/berlin-bear.psd'); // additional files
if ($obj->add($files)) {
echo 'Added successfully!';
} else {
echo 'Error in file addition';
}
>
從已經存在的TAR文檔中提取檔案
在你將檔案存入文檔之後,如何讀取北京辦公傢具呢?使用extractList()方法,顯然,這個方法可以從一個已經存在的文檔中提取一個或多個檔案到一個指定目錄,如列表D:
列表D
<php
include ('Archive/Tar.php');// import class
if (file_exists('dummy.tar')) {
$obj = new Archive_Tar('dummy.tar'); // name of TAR file
} else {
die('File does not exist');
}
$files = array('otherstuff/logo.gif',
'mystuff/alcon.doc'); // files to extract
if ($obj->extractList($files, 'unpackaged/')) {
echo 'Extracted successfully!';
} else {
echo 'Error in file extraction';
}
>
這裡,要提取檔案數組傳遞給extractlist()方法,北京鮮花速遞同時包括提取檔案存入的目錄名。注意的是檔案將連同它們的內部目錄結構一起被提取出來(雖然這個行為可以通過傳遞特殊參數給extractlist()方法進行修改)。
除了這種可選擇提取,還可以使用extract()方法,這個方法解壓整個文檔,提取所有檔案到一個指定目錄。如果這個目錄不存在,它將通過extract()方法自動建立,當然要假設指令碼據有些磁碟的許可權。列表E顯示如何去做:
列表E
<php
include ('Archive/Tar.php'); // import class
if (file_exists('dummy.tar')) {
$obj = new Archive_Tar('dummy.tar'); // name of TAR file
} else {
die('File does not exist');
}
if ($obj->extract('unpackaged/')) {
echo 'Extracted successfully!';
} else {
echo 'Error in file extraction';
}
>
如上面的例子示範,PEAR的Archive_Tar類是多功能的,它允許你僅用幾行簡單的代碼就可以執行一些相當複雜的TAE行為。希望本文中的樣本指令碼對你在日常的開發活動中使用Archive_Tar類有所協助。