PHP8 Phar簡介

2024-02-19 15:00 更新

phar 擴(kuò)展提供了一種將整個(gè) PHP 應(yīng)用程序放入單個(gè)叫做“phar”(PHP 歸檔)文件的方法,以便于分發(fā)和安裝。 除了提供此服務(wù)外,phar 擴(kuò)展還提供了一種文件格式抽象方法,用于通過 PharData 類創(chuàng)建和操作 tar 和 zip 文件,就像 PDO 提供訪問不同數(shù)據(jù)庫的統(tǒng)一接口一樣。與不能在不同數(shù)據(jù)庫之間轉(zhuǎn)換的 PDO 不同,phar 還可以使用一行代碼在 tar、zip 和 phar 文件格式之間進(jìn)行轉(zhuǎn)換。參見 Phar::convertToExecutable() 中的示例。


什么是 phar?phar 歸檔的最佳特征是可以將多個(gè)文件組合成一個(gè)文件。 因此,phar 歸檔提供了在單個(gè)文件中分發(fā)完整的 PHP 應(yīng)用程序并無需將其解壓縮到磁盤而直接運(yùn)行文件的方法。此外,phar 歸檔可以像任何其他文件一樣由 PHP 在命令行和 Web 服務(wù)器上執(zhí)行。phar 有點(diǎn)像 PHP 應(yīng)用程序的移動(dòng)存儲(chǔ)器。


phar 通過 stream 封裝協(xié)議實(shí)現(xiàn)這個(gè)功能。通常,要在 PHP 腳本中使用外部文件,將使用 include:


示例 #1 使用外部文件

<?php
 include '/path/to/external/file.php';
 ?>

PHP 實(shí)際上將 /path/to/external/file.php 轉(zhuǎn)換為 stream 封裝協(xié)議file:///path/to/external/file.php,在底層,實(shí)際上使用普通文件 stream 封裝協(xié)議 stream 函數(shù)訪問所有的本地文件。


要使用 phar 歸檔 /path/to/myphar.phar 中名為 file.php 的文件,語法跟上面的 file:// 語法非常相似。


示例 #2 使用 phar 歸檔內(nèi)部文件

<?php
 include 'phar:///path/to/myphar.phar/file.php';
 ?>

實(shí)際上可以將 phar 歸檔完全視為外部磁盤,可以使用任何 fopen() 相關(guān)函數(shù),opendir() 和 mkdir() 相關(guān)函數(shù)在 phar 歸檔內(nèi)讀取、更改、創(chuàng)建新文件或目錄。這將允許完整 PHP 應(yīng)用程序分布在單個(gè)文件中,并直接從該文件中運(yùn)行。


phar 歸檔最常見的用法是在單個(gè)文件中分發(fā)完整的應(yīng)用程序。例如,PEAR 安裝程序與 PHP 版本捆綁作為 phar 歸檔分發(fā)。要使用以這種方式分發(fā) phar 歸檔,可以在命令行或通過 Web 服務(wù)器執(zhí)行歸檔操作。


phar 歸檔可以作為 tar 歸檔、zip 歸檔或?qū)iT為 phar 擴(kuò)展設(shè)計(jì)的自定義 phar 文件格式分發(fā)。每種文件格式都有優(yōu)點(diǎn)和缺點(diǎn)。tar 和 zip 文件格式可以由任何可以讀取格式的第三方工具讀取或提取,但需要 PHP 和 phar 擴(kuò)展才能運(yùn)行。phar 文件格式是針對(duì) phar 擴(kuò)展定制和獨(dú)有的,只能由 phar 擴(kuò)展或 PEAR 包 ? PHP_Archive 創(chuàng)建,優(yōu)點(diǎn)是以這種格式創(chuàng)建的應(yīng)用程序即使未啟用 phar 擴(kuò)展也能運(yùn)行。


換句話說,即使禁用了 phar 擴(kuò)展,也可以執(zhí)行或包含基于 phar 的歸檔。只有使用 phar 擴(kuò)展才能訪問 phar 歸檔中的單個(gè)文件,除非 phar 歸檔是由 PHP_Archive 創(chuàng)建的。


phar 擴(kuò)展還能夠在單個(gè)命令中將 phar 歸檔從 tar 轉(zhuǎn)換為 zip 或 phar 文件格式:


示例 #3 將 phar 歸檔從 phar 轉(zhuǎn)換為 tar 文件格式

<?php
 $phar = new Phar('myphar.phar');
 $pgz = $phar->convertToExecutable(Phar::TAR, Phar::GZ); // makes myphar.phar.tar.gz
 ?>

phar 可以使用 gzip 或 bzip2 來壓縮單個(gè)文件或整個(gè)歸檔,并且可以通過使用 MD5、SHA-1、SHA-256 或 SHA-512 簽名自動(dòng)驗(yàn)證歸檔完整性。


最后,phar 擴(kuò)展有安全意識(shí),默認(rèn)禁用對(duì)可執(zhí)行 phar 歸檔的寫訪問,并且需要系統(tǒng)級(jí)禁用 phar.readonly php.ini 設(shè)置才能創(chuàng)建或修改 phar 歸檔。沒有可執(zhí)行存根(executable stub)的普通 tar 和 zip 歸檔始終可以使用 PharData 類創(chuàng)建或修改。


如果正在創(chuàng)建用于分發(fā)的應(yīng)用程序,需要閱讀如何創(chuàng)建 phar 歸檔。如果想了解關(guān)于 phar 支持的三種文件格式之間差異的更多信息,應(yīng)該閱讀 Phar、Tar 和 Zip。


如果使用的是 phar 應(yīng)用程序,那么在如何使用 phar 歸檔中有一些有用的提示。

phar 是 PHP 和 Archive 的合成詞,大致上基于 Java 開發(fā)人員熟悉的 jar(Java 歸檔)。


phar 歸檔的實(shí)現(xiàn)基于 PEAR 包 ? PHP_Archive,盡管實(shí)現(xiàn)細(xì)節(jié)相似,但是 phar 擴(kuò)展功能更強(qiáng)大。此外,phar 擴(kuò)展允許大多數(shù) PHP 應(yīng)用程序不加修改地運(yùn)行,而基于 PHP_Archive 的 phar 歸檔通常需要大量修改才能工作。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)