在PHP开发中,将代码打包成二进制可执行文件可以方便分发和部署,同时保护源代码。以下是几种常用的PHP打包工具和方法。

1. PHP Phar (PHP Archive)

Phar是PHP自带的打包工具,可以将整个PHP应用打包成一个.phar文件。

创建Phar包

<?php
// create-phar.php
$phar = new Phar('myapp.phar', 0, 'myapp.phar');
$phar->buildFromDirectory(__DIR__ . '/src');
$phar->setDefaultStub('index.php');

// 设置执行权限
chmod('myapp.phar', 0750);

使用Phar包

<?php
// 在代码中直接包含phar文件
require 'myapp.phar';

// 或者通过命令行执行
// php myapp.phar

2. Box (Phar打包增强工具)

Box是一个改进的Phar打包工具,提供更多配置选项。

安装Box

curl -LSs https://box-project.github.io/box/installer.php | php
# 或者使用Composer
composer global require humbug/box

配置box.json

{
    "alias": "myapp.phar",
    "main": "src/index.php",
    "output": "build/myapp.phar",
    "directories": ["src"],
    "files": ["config/config.ini"],
    "stub": true,
    "shebang": false,
    "algorithm": "OPENSSL",
    "key": "path/to/private.key",
    "compression": "GZ"
}

打包命令

bash

box compile

3. PHP Desktop (桌面应用打包)

将PHP应用打包成桌面应用程序。

使用PHP Desktop

  1. 下载PHP Desktop:https://github.com/cztomczak/phpdesktop

  2. 将PHP应用放入www目录

  3. 修改settings.json配置文件

  4. 分发整个文件夹作为桌面应用

4. Swoole Compiler (商业解决方案)

Swoole Compiler是一款商业PHP代码加密和编译工具。

使用Swoole Compiler

# 安装Swoole Compiler
# 请联系Swoole官方获取安装包

# 加密PHP文件
swoole-compiler enc.php

# 加密整个目录
swoole-compiler enc.php -d src/ -o build/

5. 使用Docker创建独立环境

虽然不是直接打包成二进制,但Docker可以创建包含PHP和应用的独立容器。

Dockerfile示例

FROM php:8.2-cli

# 安装必要扩展
RUN docker-php-ext-install mysqli pdo_mysql

# 复制应用代码
COPY . /app
WORKDIR /app

# 设置入口点
ENTRYPOINT ["php", "index.php"]

构建和运行

docker build -t my-php-app .
docker run -it --rm my-php-app

6. 使用PHP Micro (自包含可执行文件)

PHP Micro可以将PHP解释器和代码打包成一个可执行文件。

安装PHP Micro

# 下载最新版本
wget https://github.com/dixyes/phpmicro/releases/latest/download/phpmicro.linux.amd64

# 添加执行权限
chmod +x phpmicro.linux.amd64

创建自包含可执行文件

# 打包PHP应用
./phpmicro.linux.amd64 -s index.php > myapp

# 添加执行权限
chmod +x myapp

# 运行
./myapp

7. 使用Bambalam PHP EXE Compiler (Windows)

将PHP应用编译成Windows可执行文件。

使用步骤

  1. 下载Bambalam PHP EXE Compiler

  2. 选择PHP解释器和应用文件

  3. 编译成EXE文件

示例:完整打包脚本

#!/bin/bash
# build.sh - PHP应用打包脚本

APP_NAME="myapp"
VERSION="1.0.0"
BUILD_DIR="./build"
SRC_DIR="./src"

# 清理构建目录
rm -rf $BUILD_DIR
mkdir -p $BUILD_DIR

# 安装依赖(如果有)
if [ -f "composer.json" ]; then
    composer install --no-dev --optimize-autoloader
fi

# 使用Box打包
if command -v box &> /dev/null; then
    echo "使用Box打包..."
    box compile
    mv ./$APP_NAME.phar $BUILD_DIR/
else
    # 使用原生Phar
    echo "使用原生Phar打包..."
    php -d phar.readonly=0 create-phar.php
    mv ./$APP_NAME.phar $BUILD_DIR/
fi

# 创建Docker镜像
echo "创建Docker镜像..."
docker build -t $APP_NAME:$VERSION .

# 输出打包结果
echo "打包完成!"
echo "Phar文件: $BUILD_DIR/$APP_NAME.phar"
echo "Docker镜像: $APP_NAME:$VERSION"

注意事项

  1. 文件权限:确保生成的可执行文件有适当的执行权限

  2. 依赖管理:确保所有依赖都包含在打包文件中

  3. 配置文件:注意配置文件路径问题,可能需要调整

  4. 扩展依赖:确保目标环境有所需的PHP扩展

  5. 性能考虑:某些打包方式可能会影响性能

总结

根据需求选择合适的打包方式:

  • 简单分发:使用Phar或Box

  • 商业保护:考虑Swoole Compiler

  • 桌面应用:PHP Desktop

  • 容器化部署:Docker

  • 独立可执行文件:PHP Micro

每种方法都有其优缺点,根据具体场景选择最合适的方案。

更多推荐