Phar(PHP Archive)文件在PHP中类似于JAR文件,是一种打包文件。Phar文件的结构主要包括以下四个部分:
1. **Stub**:这是一个标志,格式为`<?php __HALT_COMPILER(); ?>`。前面的内容不限,但必须以`__HALT_COMPILER();`结尾,否则Phar扩展将无法识别这个文件为Phar文件。
2. **Manifest**:描述文件内容的清单。Phar文件本质上是一种压缩文件,其中每个被压缩文件的权限、属性等信息都放在这部分。这部分还会以序列化的形式存储用户自定义的meta-data。
3. **File Contents**:被压缩文件的内容。
4. **Signature**(可选):用于验证Phar文件完整性的签名,放在文件末尾。
生成Phar文件的示例代码如下:
```php
<?php
class TestObject { }
@unlink("phar.phar");
$phar = new Phar("phar.phar"); // 后缀名必须为phar
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>"); // 设置stub
$o = new TestObject();
$phar->setMetadata($o); // 将自定义的meta-data存入manifest
$phar->addFromString("test.txt", "test"); // 添加要压缩的文件
$phar->stopBuffering(); // 签名自动计算
?>
```