写个脚手架小工具,将项目打包成phar文件
假如写了个小项目,入口为 extract_eml.php,如下项目目录:
extract_eml
├── extract_eml.php
└── vendor
├── autoload.php
├── composer
└── php-mime-mail-parser
用法:
- 将以下代码保存成 phar_pack.php 文件。放在与 extrac_eml 同级目录:
. ├── extract_eml │ ├── extract_eml.php │ └── vendor └── phar_pack.php
- 执行打包命令
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";