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');
?>
将在 /path/to/myphar.phar
创建一个空的 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 特定细节,例如操作压缩和元数据。