PHP8 使用 Phar Archives:Phar 和 PharData 类
Phar 类支持读取和操作 的 Phar 存档,以及通过继承的功能进行迭代 RecursiveDirectoryIterator 类。通过对 ArrayAccess 接口的支持,可以像访问 Phar 存档中的文件一样访问它们 关联数组的一部分。
PharData 类扩展了 Phar,并且 允许创建和修改不可执行(数据)tar 和 zip 存档,即使 php.ini = 1。因此,PharData::setAlias() 和 PharData::setStub() 都被禁用,因为别名和存根的概念对于可执行文件 phar 是唯一的 档案。phar.readonly
需要注意的是,在创建 Phar 存档时,完整路径 应传递给 Phar 对象构造函数。 相对路径将无法初始化。
假设这是一个初始化的 Phar 对象,如下所示:$p
<?php
$p = new Phar('/path/to/myphar.phar', 0, 'myphar.phar');
?>
将在 中创建一个空的 Phar 存档 , 或者,如果已经存在,它将被打开 再。文本演示了别名的概念 可用于在 URL 中引用,如下所示:/path/to/myphar.phar/path/to/myphar.pharmyphar.phar/path/to/myphar.phar
<?php
// these two calls to file_get_contents() are equivalent if
// /path/to/myphar.phar has an explicit alias of "myphar.phar"
// in its manifest, or if the phar was initialized with the
// previous example's Phar object setup
$f = file_get_contents('phar:///path/to/myphar.phar/whatever.txt');
$f = file_get_contents('phar://myphar.phar/whatever.txt');
?>
使用新创建的 Phar 对象, 以下情况是可能的:$p
- $a = $p['file.php'] 创建一个引用 phar://myphar.phar/file.php 内容的 PharFileInfo 类
- $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 的元数据,通过 Phar::getMetadata(), 以及通过 Phar::getStub() 和 Phar::setStub() 设置或检索 Phar 存档的 PHP 加载器存根的唯一方法。 此外,只能一次对整个 Phar 存档进行压缩 使用 Phar 类。
记录了 Phar 对象功能的完整列表 下面。
PharFileInfo 类扩展了 SplFileInfo 类,并添加了几种用于操作特定于文件的 Phar 详细信息的方法 包含在 Phar 中,例如操作压缩和元数据。
更多建议: