Phar 類別支援讀取和操作 Phar 封存,以及透過 RecursiveDirectoryIterator 類別的繼承功能進行迭代。透過支援 ArrayAccess 介面,可以像存取關聯陣列一樣存取 Phar 封存中的檔案。
PharData 類別繼承自 Phar,並且允許建立及修改非執行檔 (資料) 的 tar 和 zip 格式壓縮檔,即使 php.ini 中的 phar.readonly
=1 也一樣。因此,PharData::setAlias() 和 PharData::setStub() 都被停用,因為別名和 stub 的概念是可執行 phar 壓縮檔所獨有的。
重要的是,在建立 Phar 壓縮檔時,應該將完整路徑傳遞給 Phar 物件建構子。相對路徑將無法初始化。
假設 $p
是一個 Phar 物件,初始化如下:
<?php
$p = new Phar('/path/to/myphar.phar', 0, 'myphar.phar');
?>
一個空的 Phar 壓縮檔將會在 /path/to/myphar.phar
建立,或者如果 /path/to/myphar.phar
已經存在,它將會被重新開啟。字面上的 myphar.phar
展示了一個別名的概念,可以用來在 URL 中參考 /path/to/myphar.phar
,如下所示:
<?php
// 如果 /path/to/myphar.phar 在其 manifest 中有一個明確的別名 "myphar.phar"
// 或者 phar 是用前一個範例的 Phar 物件設定初始化的
// 則這兩個對 file_get_contents() 的呼叫是等效的
$f = file_get_contents('phar:///path/to/myphar.phar/whatever.txt');
$f = file_get_contents('phar://myphar.phar/whatever.txt');
?>
使用新建立的 $p
Phar 物件,可以進行以下操作:
$a = $p['file.php']
建立一個 PharFileInfo 類別,它指向 phar://myphar.phar/file.php
的內容。
$p['file.php'] = $v
在 myphar.phar
中建立一個新檔案 (phar://myphar.phar/file.php
),或覆寫現有檔案。$v
可以是一個字串或一個已開啟的檔案指標,在這種情況下,檔案的全部內容將用於建立新檔案。請注意,$p->addFromString('file.php', $v)
在功能上與上述等效。也可以使用 $p->addFile('/path/to/file.php', 'file.php')
新增檔案的內容。最後,可以使用 $p->addEmptyDir('empty')
建立一個空目錄。
isset($p['file.php'])
可以用來判斷 phar://myphar.phar/file.php
是否存在於 myphar.phar
中。
unset($p['file.php'])
從 myphar.phar
中刪除 phar://myphar.phar/file.php
。
此外,Phar 物件是唯一可以透過 Phar::getMetadata() 存取 Phar 特定中繼資料的方式,也是唯一可以透過 Phar::getStub() 和 Phar::setStub() 設定或擷取 Phar 壓縮檔的 PHP 載入器 stub 的方式。此外,整個 Phar 壓縮檔的壓縮只能使用 Phar 類別來操作。
Phar 物件功能的完整列表記錄在下方。
PharFileInfo 類別繼承自 SplFileInfo 類別,並新增了幾個方法,用於操作 Phar 封存中檔案的 Phar 特定細節,例如操作壓縮和元數據。