简介

phar 扩展提供了一种方法,可以将整个 PHP 应用程序放入一个名为“phar”(PHP 存档)的单个文件中,以便于分发和安装。除了提供此服务外,phar 扩展还提供了一种文件格式抽象方法,用于通过 PharData 类创建和操作 tar 和 zip 文件,就像 PDO 提供了访问不同数据库的统一接口一样。与无法在不同数据库之间转换的 PDO 不同,Phar 还可以通过一行代码在 tar、zip 和 phar 文件格式之间转换。参见 Phar::convertToExecutable() 以获取一个示例。

什么是 phar? Phar 存档最显著的特点是,它们提供了一种方便的方法,可以将多个文件组合成一个单一文件。因此,phar 存档提供了一种方法,可以将完整的 PHP 应用程序分发在一个文件中,并在无需提取到磁盘的情况下运行它。此外,phar 存档可以通过 PHP 像其他文件一样轻松地执行,无论是在命令行还是在 Web 服务器上。Phar 就像 PHP 应用程序的优盘。

Phar 通过 流包装器 实现此功能。通常,要在 PHP 脚本中使用外部文件,您需要使用 include

示例 #1 使用外部文件

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

可以认为 PHP 实际上将 /path/to/external/file.php 转换为流包装器,即 file:///path/to/external/file.php,在幕后它实际上使用普通文件流包装器流函数来访问所有本地文件。

要使用包含在 phar 存档 /path/to/myphar.phar 中的名为 file.php 的文件,语法与上面的 file:// 语法非常相似。

示例 #2 使用 phar 存档中的文件

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

实际上,您可以将 phar 存档完全当作外部磁盘一样对待,使用任何与 fopen() 相关的函数、opendir()mkdir() 相关的函数来读取、更改或创建 phar 存档中的新文件和目录。这允许将完整的 PHP 应用程序分发在一个文件中,并直接从该文件运行。

phar 存档最常见的用途是将完整的应用程序分发在一个文件中。例如,与 PHP 版本捆绑在一起的 PEAR 安装程序以 phar 存档的形式分发。要使用以这种方式分发的 phar 存档,可以在命令行或通过 Web 服务器执行该存档。

Phar 存档可以作为 tar 存档、zip 存档或专门为 phar 扩展设计的自定义 phar 文件格式分发。每种文件格式都有优点和缺点。tar 和 zip 文件格式可以通过任何可以读取该格式的第三方工具读取或提取,但需要 phar 扩展才能与 PHP 一起运行。phar 文件格式是自定义的,专用于 phar 扩展,只能由 phar 扩展或 PEAR 包 » PHP_Archive 创建,但它具有以下优势:以这种格式创建的应用程序即使在禁用 phar 扩展的情况下也能运行。

换句话说,即使在禁用 phar 扩展的情况下,也可以执行或包含基于 phar 的存档。访问 phar 存档中的单个文件只能使用 phar 扩展,除非该 phar 存档是由 PHP_Archive 创建的。

phar 扩展还能够通过单个命令将 phar 存档从 tar 转换为 zip 或 phar 文件格式。

示例 #3 将 phar 存档从 phar 转换为 tar 文件格式

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

Phar 可以使用 gzip 压缩或 bzip2 压缩来压缩单个文件或整个存档,并且可以通过使用 MD5、SHA-1、SHA-256 或 SHA-512 签名来自动验证存档完整性。

最后,Phar 扩展非常重视安全,默认情况下会禁用对可执行 phar 存档的写入访问权限,并且需要在系统级别禁用 phar.readonly php.ini 设置才能创建或修改 phar 存档。可以使用 PharData 类始终创建或修改没有可执行存根的普通 tar 和 zip 存档。

如果您正在创建要分发的应用程序,您需要阅读 如何创建 Phar 存档。如果您想详细了解 phar 支持的三种文件格式之间的差异,您应该阅读 Phar、Tar 和 Zip

如果您正在使用 phar 应用程序,则可以在 如何使用 Phar 存档 中找到有用的提示。

单词 pharPHPArchive 的合成词,它大致基于 Java 开发人员熟悉的 jar(Java 存档)。

Phar 存档的实现基于 PEAR 包 » PHP_Archive,实现细节类似,尽管 phar 扩展功能强大得多。此外,phar 扩展允许大多数 PHP 应用程序在未经修改的情况下运行,而基于 PHP_Archive 的 phar 存档通常需要大量修改才能正常工作。

添加说明

用户贡献的说明

此页面没有用户贡献的说明。
To Top