PHAR (文件格式)

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

PHP 归档
扩展名
.phar
开发者PHP, Davey Shafik, Greg Beaver, Marcus Börger
格式类型文件归档英语File archive, 数据压缩
扩展自ZIP, tar

PHAR文件可以是三种格式之一:tarZIP(它们与各自的工具相兼容),以及自定义的PHAR格式。无论使用何种格式,所有PHAR文件都使用.phar作为文件扩展名。使用标准的tar和zip应用程序可以创建和解压缩Tar和Zip格式的归档,而PHAR格式的归档需要使用自己写的PHP代码(利用PHP的PHAR扩展页面存档备份,存于互联网档案馆))或者使用PEARPHP归档包页面存档备份,存于互联网档案馆)来创建和提取。

历史

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

PHAR扩展

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

设计

PHAR文件允许使用Tar,Zip或者PHAR格式的归档。 无论格式如何,每个归档都包含三个部分:

  1. 存根(Stub) —— 一个可以引导归档的PHP文件。存根必须包含__HALT_COMPILER();语句,并且默认存根拥有在不启用PHAR扩展的情况下运行PHAR文件的能力。[8]
  2. 清单 —— 清单详细说明了存归档的内容。
  3. 文件内容 —— 归档中包含的原始文件

另外,PHAR格式还可以包括用于验证PHAR完整性的签名。

清单

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

压缩

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

执行PHAR文件

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

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

使用情况

尽管PHAR最初是为Web用途而设计的,但它经常被用作命令行工具使用。 以PHAR格式分发的流行应用程序包括ComposerPHPUnit英语PHPUnit

参考文献

  1. ^ PHAR file extension - Open .phar files. File-Extensions.org. [2018-02-06]. (原始内容存档于2018-02-06). 
  2. ^ 2.0 2.1 2.2 PHP 5.3 5th Anniversary: The History of PHP Archives (PHAR Files). blog.engineyard.com. [2018-02-06]. (原始内容存档于2017-09-17). 
  3. ^ PEPr :: Details :: PHP_Archive. pear.php.net. [2018-02-06]. (原始内容存档于2017-05-10). 
  4. ^ PEPr :: Votes :: PHP_Archive. pear.php.net. [2018-02-06]. (原始内容存档于2017-05-10). 
  5. ^ PECL :: Package :: phar. pecl.php.net. [2018-02-06]. (原始内容存档于2018-02-06). 
  6. ^ PHP: News Archive - 2009. php.net. [2018-02-06]. (原始内容存档于2018-02-06). 
  7. ^ PHP: PHP 5 ChangeLog. php.net. [2018-02-06]. (原始内容存档于2018-02-06). 
  8. ^ PHP: Phar::createDefaultStub - Manual. php.net. [2018-02-06]. (原始内容存档于2018-02-06). 
  9. ^ PHP: Phar File Format - Manual. php.net. [2018-02-06]. (原始内容存档于2018-02-06). 

外部链接