本文目录导读:

- 使用 PHP 内置的 PHAR(推荐)
- 使用 Box(最常用)
- 使用 PHPDism(跨平台)
- 使用 PHPCompiler(Windows)
- 使用 rd-based 方案(跨平台)
- 使用 Pholang(推荐)
- 使用 Node.js + Docker 方案
- 使用并发打包工具:Packer
- 注意事项
在 PHP 中生成独立可执行文件(即打包成单个可执行的二进制文件,无需安装 PHP 环境即可运行)主要有以下几种主流方案:
使用 PHP 内置的 PHAR(推荐)
PHAR(PHP Archive)是 PHP 官方的打包格式,可以生成单个 .phar 文件。
基本用法:
# 创建 PHAR 文件需要修改 php.ini phar.readonly = Off
示例代码:
<?php
// create-phar.php
$srcRoot = '/path/to/your/project/';
$buildRoot = '/path/to/build/';
$phar = new Phar($buildRoot . 'app.phar');
$phar->buildFromDirectory($srcRoot);
$phar->setDefaultStub('index.php');
$phar->setStub("#!/usr/bin/env php\n" . $phar->createDefaultStub('index.php'));
$phar->compressFiles(Phar::GZ);
运行:
php app.phar
使用 Box(最常用)
Box 是目前最流行的 PHP 打包工具,专门用于将 PHP 项目打包成独立可执行文件。
安装 Box:
composer global require humbug/box
配置文件 box.json:
{
"main": "bin/app.php",
"output": "dist/app.phar",
"compression": "GZ",
"directories": ["src"],
"files": ["vendor/autoload.php"],
"stub": true,
"chmod": "0755"
}
打包命令:
box compile
运行:
./dist/app.phar
使用 PHPDism(跨平台)
PHPDism 可以将 PHP 编译成独立的原生可执行文件。
安装:
git clone https://github.com/endoleg/phpdism.git cd phpdism python3 setup.py install
使用:
phpdism -i input.php -o output -v
使用 PHPCompiler(Windows)
安装:
composer require phplicengine/phpcompiler
示例:
<?php
require 'vendor/autoload.php';
use PHPLicengine\Compiler\Compiler;
$compiler = new Compiler();
$compiler->compile('source.php', 'output.exe');
使用 rd-based 方案(跨平台)
使用 static-php-cli:
# 下载预编译版本 wget https://github.com/crazywhalecc/static-php-cli/releases/download/v2.0.0/static-php-cli.phar # 使用 php static-php-cli.phar make
使用 Pholang(推荐)
PhoLoader 是一个轻量级的PHP打包工具。
安装:
composer require juninmd/pholoader
使用:
<?php
use PhoLoader\Loader;
$loader = new Loader();
$loader->setExecutable('app.php');
$loader->save('app.phar');
使用 Node.js + Docker 方案
虽然不是纯 PHP,但可以通过 Docker 来创建独立运行环境:
FROM php:8.2-cli COPY . /app WORKDIR /app CMD ["php", "app.php"]
然后构建并运行:
docker build -t myapp . docker run myapp
使用并发打包工具:Packer
composer require super-locaml/packer
$packer = new Packer();
$packer->setExecutable('app.php');
$packer->setOutput('app');
$packer->pack();
注意事项
- PHP 版本要求:确保目标系统有相应的 PHP 版本
- 扩展依赖:如果使用了特定扩展,需要在目标系统安装
- 性能影响:打包后的文件运行速度可能略有下降
- 平台兼容性:不同平台(Windows/Linux/macOS)需要分别打包
- 文件大小:打包后的文件可能较大,特别是包含第三方库时
| 需求 | 推荐工具 |
|---|---|
| 简单快速 | PHAR(内置) |
| 生产环境 | Box |
| 跨平台 | PHPDism / static-php-cli |
| Windows | PHPCompiler |
| 轻量级 | PhoLoader |
最推荐使用 Box,因为它功能强大、维护活跃、支持广泛,并且有完善的文档和社区支持。