承接 tourze/php-packer 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

tourze/php-packer

最新稳定版本:0.0.1

Composer 安装命令:

composer require tourze/php-packer

包简介

A PHP library for analyzing, packing and merging PHP files using AST storage

README 文档

README

PHP Version License Build Status Code Coverage

English | 中文

A PHP single-file packer that packages PHP projects into a single executable file.

Table of Contents

Features

  • Automatic PHP file dependency analysis
  • Support for PSR-4/PSR-0 autoloading standards
  • Use SQLite to store and query dependency relationships
  • Intelligent parsing of require/include statements
  • Handle class inheritance, interface implementation, and trait usage
  • Generate optimized bootstrap code
  • Support for conditional dependencies and circular dependency detection
  • Modular command design with step-by-step operations

Installation

composer require tourze/php-packer

Quick Start

Basic Workflow

# 1. Analyze project and generate dependency database
php vendor/bin/php-packer analyze src/index.php --database=build/app.db

# 2. View analysis results
php vendor/bin/php-packer files --database=build/app.db --stats

# 3. Query dependencies for specific files
php vendor/bin/php-packer dependencies src/Application.php --database=build/app.db --tree

# 4. Pack into single file
php vendor/bin/php-packer pack --database=build/app.db --output=dist/app.php

Available Commands

analyze - Analyze PHP Project

Analyze entry file and generate dependency database.

php-packer analyze <entry-file> [options]

Options:
  --database, -d     Database file path (default: ./packer.db)
  --root-path, -r    Project root path (default: current directory)
  --composer, -c     Composer.json path (default: <root>/composer.json)
  --autoload         Additional autoload config in format "psr4:prefix:path"
  --help, -h         Show help message

Examples:
  php-packer analyze index.php
  php-packer analyze src/app.php --database=build/myapp.db
  php-packer analyze index.php --autoload="psr4:MyLib:lib/"

dependencies - Query Dependencies

Query and display file dependencies.

php-packer dependencies <file-path> [options]

Options:
  --database, -d     Database file path (default: ./packer.db)
  --root-path, -r    Project root path (default: current directory)
  --reverse          Show files that depend on this file
  --tree             Display in tree structure
  --help, -h         Show help message

Examples:
  php-packer dependencies src/Controller.php
  php-packer dependencies src/Model.php --reverse
  php-packer dependencies src/Application.php --tree

files - List All Files

List all files and their information in the database.

php-packer files [options]

Options:
  --database, -d     Database file path (default: ./packer.db)
  --root-path, -r    Project root path (default: current directory)
  --type, -t         Filter by type (class, trait, interface, script)
  --stats            Show only statistics
  --entry            Show only entry files
  --sort             Sort by: name, type, size, dependencies (default: name)
  --help, -h         Show help message

Examples:
  php-packer files --stats
  php-packer files --type=class
  php-packer files --sort=dependencies

pack - Pack Project

Read analysis results from database and generate packed file.

php-packer pack [options]

Options:
  --database, -d     Database file path (default: ./packer.db)
  --root-path, -r    Project root path (default: current directory)
  --output, -o       Output file path (default: ./packed.php)
  --compression      Enable output compression (gzip)
  --strip-comments   Remove code comments
  --optimize         Enable code optimization
  --help, -h         Show help message

Examples:
  php-packer pack --output=dist/app.php
  php-packer pack --strip-comments --optimize
  php-packer pack --output=app.phar --compression

Complete Example

Packing a Laravel application:

# Analyze
php-packer analyze public/index.php \
  --database=build/laravel.db \
  --root-path=/path/to/laravel

# View statistics
php-packer files --database=build/laravel.db --stats

# Pack
php-packer pack \
  --database=build/laravel.db \
  --output=dist/laravel-packed.php \
  --strip-comments \
  --optimize

How It Works

  1. Initialization Phase

    • Create SQLite database
    • Load autoload rules from composer.json
    • Parse configuration files
  2. Analysis Phase

    • Start analysis from entry file
    • Parse AST using PHP Parser
    • Extract all dependency relationships
    • Iteratively analyze all related files
  3. Resolution Phase

    • Build dependency graph
    • Resolve symbol references
    • Detect circular dependencies
    • Determine file loading order
  4. Packing Phase

    • Generate bootstrap code
    • Merge files in dependency order
    • Optimize output code
    • Generate single PHP file

Configuration

The packer can be configured through various options:

Database Options

  • --database, -d: Specify SQLite database file path
  • Default: ./packer.db

Path Options

  • --root-path, -r: Set project root directory
  • --composer, -c: Specify composer.json file location
  • --autoload: Add custom autoload rules in format "psr4:prefix:path"

Output Options

  • --output: Specify output file path for packed result
  • --strip-comments: Remove comments from packed file
  • --optimize: Enable code optimization

Example Configuration

php-packer analyze src/app.php \
  --database=build/app.db \
  --root-path=/path/to/project \
  --composer=composer.json \
  --autoload="psr4:MyApp\\:src/"

Advanced Usage

Custom Autoloading

You can add custom PSR-4 or PSR-0 autoload rules:

php-packer analyze src/app.php \
  --autoload="psr4:Custom\\Namespace\\:custom/src/" \
  --autoload="psr0:Legacy_:legacy/lib/"

Optimization Options

Enable various optimizations during packing:

php-packer pack \
  --database=build/app.db \
  --output=dist/optimized-app.php \
  --strip-comments \
  --optimize

Dependency Analysis

Query and analyze dependencies for debugging:

# Show dependency tree for a specific file
php-packer dependencies src/Controller/HomeController.php \
  --database=build/app.db \
  --tree

# List all files with statistics
php-packer files --database=build/app.db --stats

Examples

Check the complete examples in the examples/ directory:

cd packages/php-packer
php bin/php-packer examples/packer-config.json

This will pack the example project into build/packed.php.

Limitations

  • Does not support dynamic includes (e.g., require $file)
  • Does not support code in eval()
  • Requires PHP 8.1+
  • Some PHP extensions may need special handling

Development

Run tests:

vendor/bin/phpunit

Code quality check:

vendor/bin/phpstan analyse src/

License

MIT

统计信息

  • 总下载量: 0
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 2
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 2
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-11-14