Phar 归档
Phar(PHP Archive)是 PHP 专属的归档格式,类似于 Java 的 JAR。Phar 可以将整个 PHP 应用打包为单个文件,方便分发和部署。Composer 的 .phar 包就是使用 Phar 格式。本节将讲解 Phar 的创建和使用。
基础概念
Phar 优势
- 将应用打包为单个可执行 PHP 文件
- 内置签名验证确保完整性
- 支持文件映射(无需解压即可读取)
- 广泛用于工具分发(如 PHPUnit、Composer)
启用 Phar
ini
; php.ini
phar.readonly = Off ; 允许创建 Phar创建 Phar
php
<?php
declare(strict_types=1);
$phar = new Phar('/tmp/myapp.phar', 0, 'myapp.phar');
$phar->startBuffering();
// 添加文件
$phar->addFile('src/index.php', 'index.php');
$phar->addFile('src/Config.php', 'Config.php');
// 添加整个目录
$phar->buildFromDirectory('src/', '/');
// 设置 stub(入口文件)
$stub = "#!/usr/bin/env php\n"
. "Phar::mapPhar('myapp.phar');\n"
. "require 'phar://myapp.phar/index.php';\n"
. "__HALT_COMPILER();\n";
$phar->setStub($stub);
$phar->stopBuffering();
echo "Phar 创建成功" . PHP_EOL;读取 Phar
php
<?php
declare(strict_types=1);
// 直接运行
// php /tmp/myapp.phar
// 读取 Phar 内文件
$phar = new Phar('/tmp/myapp.phar');
foreach (new RecursiveIteratorIterator($phar) as $file) {
echo $file . PHP_EOL;
}
// 获取文件内容
$content = file_get_contents('phar:///tmp/myapp.phar/index.php');注意事项
- 生产环境
phar.readonly应设为On - Phar 不适合打包包含大量静态资源的应用
下一节
继续学习:OpenSSL 扩展