PHAR (文件格式)

在软件中，PHAR（PHP归档）文件是一种打包格式，通过将许多PHP代码文件和其他资源（例如图像，样式表等）捆绑到一个归档文件中来实现应用程序和库的分发。

PHAR文件可以是三种格式之一：tar和ZIP（它们与各自的工具相兼容），以及自定义的PHAR格式。无论使用何种格式，所有PHAR文件都使用.phar作为文件扩展名。使用标准的tar和zip应用程序可以创建和解压缩Tar和Zip格式的归档，而PHAR格式的归档需要使用自己写的PHP代码（利用PHP的PHAR扩展）或者使用PEAR的PHP归档包来创建和提取。

历史 
受到Java的JAR文件格式的影响，PHAR文件格式创建于2004年，目的在于加快通过FTP部署应用程序的速度。使用更简单的tar格式而不是使用ZIP文件格式，而使用tar命令行程序创建第一个PHAR文件作为概念验证。2004年6月14日，最初的PHP归档包提交给PEAR，并于2004年12月13日被一致接受。

PHAR扩展 
在2007年，PHP归档包被移植到C并作为一个PEAR扩展发布。这个扩展于PHP 5.3.0版本开始集成于PHP内核并且默认被启用。

设计 
PHAR文件允许使用Tar，Zip或者PHAR格式的归档。 无论格式如何，每个归档都包含三个部分：
 存根(Stub) —— 一个可以引导归档的PHP文件。存根必须包含__HALT_COMPILER();语句，并且默认存根拥有在不启用PHAR扩展的情况下运行PHAR文件的能力。
 清单 —— 清单详细说明了存归档的内容。
 文件内容 —— 归档中包含的原始文件
另外，PHAR格式还可以包括用于验证PHAR完整性的签名。

清单 
清单包含有关归档的元数据信息及其内容。二进制格式旨在高效地解析PHP和C。它由固定长度的段组成，除了长度规格对之后是可变长度段。 每个文件在全局清单的一段中都有自己的清单。 目前的格式是版本1.1.1。

压缩 
所有的3种格式都支持压缩，但只有PHAR格式同时支持每个文件和整个归档的压缩。Zip和Tar格式分别只支持每个文件压缩和整个文件压缩。

执行PHAR文件 
假设启用了PHAR扩展，所有格式的PHAR文件可以通过执行PHP解释器("php file.phar")来执行。 如果没有启用PHAR扩展，则只能执行PHAR格式的PHAR文件。

此外，可以将PHAR文件标记为可执行文件，并添加适当的shebang以让PHAR可以直接执行。

使用情况 
尽管PHAR最初是为Web用途而设计的，但它经常被用作命令行工具使用。 以PHAR格式分发的流行应用程序包括Composer和。

参考文献

外部链接 
 PHAR文件格式
 PHAR文档
 PHP归档PEAR包
 PHAR扩展 (PECL)
归档格式