2024 PHP Conference Japan

PharData::extractTo

(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL phar >= 2.0.0)

PharData::extractTo將 tar/zip 封存的內容解壓縮到目錄

說明

公開 PharData::extractTo(字串 $directory, 陣列|字串|null $files = null, 布林值 $overwrite = false): 布林值

將 tar/zip 封存檔中的所有檔案解壓縮到磁碟。解壓縮的檔案和目錄會保留封存檔中儲存的權限。選用參數允許選擇性地控制要解壓縮哪些檔案,以及是否可以覆寫磁碟上的現有檔案。第二個參數 files 可以是要解壓縮的檔案或目錄的名稱,或是要解壓縮的檔案和目錄名稱的陣列。預設情況下,此方法不會覆寫現有檔案,可以將第三個參數設定為 true 以啟用檔案覆寫。此方法類似於 ZipArchive::extractTo()

參數

directory

要將指定的 files 解壓縮到的路徑

files

要解壓縮的檔案或目錄的名稱,或是要解壓縮的檔案/目錄陣列

overwrite

設定為 true 以啟用覆寫現有檔案

回傳值

成功時回傳 true,但最好檢查是否有拋出例外,如果沒有拋出例外,則假設成功。

錯誤/例外

如果在將變更寫入磁碟時發生錯誤,則會拋出 PharException

範例

範例 #1 PharData::extractTo() 範例

<?php
try {
$phar = new PharData('myphar.tar');
$phar->extractTo('/full/path'); // 解壓縮所有檔案
$phar->extractTo('/another/path', 'file.txt'); // 只解壓縮 file.txt
$phar->extractTo('/this/path',
array(
'file1.txt', 'file2.txt')); // 只解壓縮兩個檔案
$phar->extractTo('/third/path', null, true); // 解壓縮所有檔案,並覆蓋現有檔案
} catch (Exception $e) {
// 處理錯誤
}
?>

注意事項

備註:

Windows NTFS 檔案系統不支援檔名中的某些字元,即 <|>*?":。 檔名後方帶有句點也不支援。 與某些解壓縮工具不同,此方法不會將這些字元替換為底線,而是無法解壓縮此類檔案。

另請參閱

新增備註

使用者貢獻的備註 3 則備註

njh at aelius dot com
11 年前
請注意,PHAR 只支援解壓縮 tar 封存的「ustar」變體。

某些系統(例如舊版 Mac OS X)預設會產生「pax」格式。

請參閱此處以取得更多資訊
https://php.dev.org.tw/manual/pl/phar.fileformat.tar.php
匿名
7 年前
我無法從 tar 封存中解壓縮第一個目錄
目的地目錄仍然是空的,
沒有出現任何錯誤

<?php
$tar
= new \PharData('archive.tar');
if (
$tar->current()->isDir()) {
echo
'is_dir';
$dir = $tar->current()->getPathname();
$dir = basename($dir);
$tar->extractTo('destination', $dir);
}
?>

文件說明提示第二個參數可以是要從歸檔中解壓縮的檔案或目錄的名稱,真的可以這樣嗎?
Daniel
7 個月前
這是一個如何使用 Phar 的 decompress() 和 extractTo() 方法解壓縮 TAR.GZ 檔案的範例

<?php
echo '<h1>TAR.GZ 解壓縮</h1>';

$file_name = 'your_file.tar.gz';
$tar_file_name = str_replace('.gz', '', $file_name);
$dir_file_name = str_replace('.tar.gz', '', $file_name);

// 從 gz 解壓縮並建立 your_file.tar
$p = new PharData($file_name);
$p->decompress();

// 從 tar 解壓縮到資料夾 'your_file'
$phar = new PharData($tar_file_name);
$phar->extractTo($dir_file_name);

echo
'<h1>完成</h1>';
?>
To Top