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 特定细节,例如操作压缩和元数据。