使用 Phar 归档:Phar 和 PharData 类

Phar 类支持读取和操作 Phar 归档,以及通过继承 RecursiveDirectoryIterator 类的功能进行迭代。通过对 ArrayAccess 接口的支持,可以像访问关联数组一样访问 Phar 归档中的文件。

PharData 类扩展了 Phar,并允许创建和修改非可执行(数据)tar 和 zip 归档,即使 php.ini 中的 phar.readonly=1。因此,PharData::setAlias()PharData::setStub() 都被禁用,因为别名和存根的概念对于可执行的 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 在其清单中具有显式的 "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 创建一个新文件 (phar://myphar.phar/file.php),或者覆盖 myphar.phar 中的现有文件。$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 加载器存根的唯一方式。此外,一次性压缩整个 Phar 归档只能使用 Phar 类进行操作。

下面记录了 Phar 对象功能的完整列表。

PharFileInfo 类扩展了 SplFileInfo 类,并添加了一些方法来操作 Phar 中包含的文件的 Phar 特定细节,例如操作压缩和元数据。

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top