phar 打包小工具

写个脚手架小工具,将项目打包成phar文件

假如写了个小项目,入口为 extract_eml.php,如下项目目录:

extract_eml
├── extract_eml.php
└── vendor
    ├── autoload.php
    ├── composer
    └── php-mime-mail-parser

用法:

  1. 将以下代码保存成 phar_pack.php 文件。放在与 extrac_eml 同级目录:
    .
    ├── extract_eml
    │   ├── extract_eml.php
    │   └── vendor
    └── phar_pack.php
  2. 执行打包命令
    znl.pub:~# php -d phar.readonly=0  phar_pack.php \
    extract_eml.phar \
    extract_eml \
    extract_eml/extract_eml.php

附录:

<?php
// phar_pack.php

if ($argc !== 4) {
    fwrite(STDERR, "Usage: php -d phar.readonly=0 " . $argv[0] . " <phar-file-name> <source-directory> <entry-file>\n");
    exit(1);
}

$pharFileName = $argv[1];
$sourceDirectory = realpath($argv[2]);
$entryFile = substr(realpath($argv[3]),strlen($sourceDirectory));

// 创建一个新的 Phar 对象
$phar = new Phar($pharFileName);

// 设置压缩方式
$phar->compressFiles(Phar::GZ);

// 添加目录中的所有文件到 Phar 文件
$phar->buildFromDirectory($sourceDirectory);

// 设置 Phar 文件的入口脚本 (stub)
$phar->setStub("#!/usr/bin/env php
    <?php
    require 'phar://'.__FILE__.\"$entryFile\";
    __HALT_COMPILER();    
");

// 保存并关闭 Phar 文件
$phar->stopBuffering();

echo "Phar file created successfully.\n";

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注