2023-04-22 22:18:44 +08:00
2023-04-15 19:14:15 +08:00
2023-04-15 18:46:46 +08:00
2023-04-22 21:23:12 +08:00
2023-03-15 20:40:49 +08:00
2023-03-18 17:44:23 +08:00
2023-03-19 14:09:28 +08:00
2023-04-15 18:56:05 +08:00
2023-03-18 14:22:31 +08:00
2023-03-15 20:40:49 +08:00
2023-04-22 22:18:44 +08:00
2023-04-22 22:18:44 +08:00

static-php-cli

Compile A Statically Linked PHP With Swoole and other Extensions.

If you are using English, see English README.

编译纯静态的 PHP Binary 二进制文件,带有各种扩展,让 PHP-cli 应用变得更便携!

同时可以使用 micro 二进制文件,将 PHP 源码和 PHP 二进制构建为一个文件分发!(由 dixyes/phpmicro 提供支持)

此分支为重构的新版,如果你在找纯 Bash 编写的旧版本,请到 bash-version 分支

Version License

编译环境需求

是的,本项目采用 PHP 编写,编译前需要一个 PHP 环境,比较滑稽。 但本项目默认可通过自身构建的 micro 和 static-php 二进制运行,其他只需要包含 tokenizer 扩展和 PHP 版本大于等于 8.0 即可。

下面是架构支持情况,CI 代表支持 GitHub Action 构建,Local 代表支持本地构建,空 代表暂不支持。

x86_64 aarch64
macOS CI, Local Local
Linux CI, Local Local
Windows

linux-aarch64 and macOS-arm64 因 GitHub 暂未提供 arm runner如果要构建 arm 二进制,可以使用手动构建。

目前支持编译的 PHP 版本为:7.48.08.18.2

使用

请先根据下方扩展列表选择你要编译的扩展。

支持的扩展情况

扩展支持列表

使用 Actions 构建

使用 GitHub Action 可以方便地构建一个静态编译的 PHP 和 phpmicro同时可以自行定义要编译的扩展。

  1. Fork 本项目。
  2. 进入项目的 Actions选择 CI。
  3. 选择 Run workflow,填入你要编译的 PHP 版本、目标类型、扩展列表。(扩展列表使用英文逗号分割,例如 bcmath,curl,mbstring
  4. 等待大约一段时间后,进入对应的任务中,获取 Artifacts

如果你选择了 debug,则会在构建时输出所有日志,包括编译的日志,以供排查错误。

手动构建

先克隆本项目:

git clone https://github.com/crazywhalecc/static-php-cli.git

如果你本机没有安装 PHP你可以通过命令下载静态编译好的 php-cli 和 Composer。

下载的 php 和 Composer 将保存为 bin/phpbin/composer

cd static-php-cli
chmod +x bin/setup-runtime
./bin/setup-runtime

# 使用独立的 php 运行 static-php-cli
./bin/php bin/spc

# 使用 composer
./bin/php bin/composer

下面是使用 static-php-cli 编译静态 php 和 micro 的基础用法:

# 克隆本项目
cd static-php-cli
composer update
chmod +x bin/spc
# 检查环境依赖,并根据提示的命令安装缺失的编译工具(目前仅支持 macOSLinux 后续会支持)
./bin/spc doctor
# 拉取所有依赖库
./bin/spc fetch --all
# 构建包含 bcmath,openssl,tokenizer,sqlite3,pdo_sqlite,ftp,curl 扩展的 php-cli 和 micro.sfx
./bin/spc build "bcmath,openssl,tokenizer,sqlite3,pdo_sqlite,ftp,curl" --build-all

你也可以使用参数 --with-php=x.y 来指定下载的 PHP 版本,目前支持 7.4 ~ 8.2

# 优先考虑使用 >= 8.0 的 PHP 版本
./bin/spc fetch --with-php=8.2 --all

如果出现了任何错误,可以使用 --debug 参数来展示完整的输出日志,以供排查错误:

./bin/spc build openssl,pcntl,mbstring --debug
./bin/spc fetch --all --debug

使用 php-cli

php-cli 是一个静态的二进制文件,类似 Go、Rust 语言编译后的单个可移植的二进制文件。

采用参数 --build-all 或不添加 --build-micro 参数时,最后编译结果会输出一个 ./php 的二进制文件,此文件可分发、可直接使用。 该文件编译后会存放在 buildroot/bin/ 目录中,名称为 php,拷贝出来即可。

cd buildroot/
./php -v
./php -m
./php your_code.php

使用 micro.sfx

phpmicro 是一个提供自执行二进制 PHP 的项目,本项目依赖 phpmicro 进行编译自执行二进制。详见 dixyes/phpmicro

采用项目参数 --build-all--build-micro 时,最后编译结果会输出一个 ./micro.sfx 的文件,此文件需要配合你的 PHP 源码使用。 该文件编译后会存放在 source/php-src/sapi/micro/ 目录中,拷贝出来即可。

使用时应准备好你的项目源码文件,可以是单个 PHP 文件,也可以是 Phar 文件。

echo "<?php echo 'Hello world' . PHP_EOL;" > code.php
cat micro.sfx code.php > single-app && chmod +x single-app
./single-app

# 如果打包 PHAR 文件,仅需把 code.php 更换为 phar 文件路径即可

有些情况下的 phar 文件可能无法在 micro 环境下运行。

项目支持情况

  • 基础结构编写(采用 symfony/console
  • 错误处理
  • macOS 支持
  • Windows 支持
  • Linux 支持
  • PHP 7.4 支持
  • fpm 支持

更多功能和特性正在陆续支持中,详见:https://github.com/crazywhalecc/static-php-cli/issues/32

贡献

目前支持的扩展较少,如果缺少你需要的扩展,可发起 Issue。如果你对本项目较熟悉也欢迎为本项目发起 Pull Request。

贡献基本原则如下:

  • 项目采用了 php-cs-fixer、phpstan 作为代码规范工具,贡献前请对更新的代码执行 composer analyzecomposer cs-fix
  • 涉及到其他开源库的部分应提供对应库的协议,同时对配置文件在修改后采用命令 sort-config 排序。有关排序的命令,见文档。
  • 应遵循命名规范,例如扩展名称应采取 PHP 内注册的扩展名本身,外部库名应遵循项目本身的名称,内部逻辑的函数、类名、变量等应遵循驼峰、下划线等格式,禁止同一模块混用。
  • 涉及编译外部库的命令和 Patch 时应注意兼容不同操作系统。

开源协议

本项目依据旧版本惯例采用 MIT License 开源,自身的部分代码引用或修改自以下项目:

因本项目的特殊性,使用项目编译过程中会使用很多其他开源项目,例如 curl、protobuf 等,它们都有各自的开源协议。 请在编译完成后,使用命令 dump-license(TODO) 导出项目使用项目的开源协议,并遵守对应项目的 LICENSE。

进阶

本项目重构分支为模块化编写。

This section will be improved after refactor version released.

Description
Build single static PHP binary in linux, build with PHP project together, with Swoole and other popular extensions included.
Readme MIT 42 MiB
Languages
PHP 95.8%
Shell 2%
JavaScript 1%
PowerShell 0.5%
C 0.4%
Other 0.3%