2023-04-08 18:46:12 +08:00
2023-04-08 10:35:31 +08:00
2023-03-28 23:51:57 +08:00
2023-04-08 18:44:46 +08:00
2023-03-18 14:22:52 +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-08 18:45:49 +08:00
2023-03-18 14:22:31 +08:00
2023-03-15 20:40:49 +08:00
2023-04-03 21:30:32 +08:00
2023-04-03 21:30:32 +08:00

static-php-cli

Compile A Statically Linked PHP With Swoole and other Extensions. English README

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

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

注:只能编译 CLI 模式,暂不支持 CGI 和 FPM 模式。

License

编译环境需求

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

  • Linux
    • 支持架构: aarch64, amd64
    • 支持发行版: alpine, ubuntu, centos
    • 依赖工具: make, bison, flex, pkg-config, git, autoconf, automake, tar, unzip, gzip, bzip2, cmake
  • macOS
    • 支持架构: arm64, x86_64
    • 依赖工具: make, bison, flex, pkg-config, git, autoconf, automake, tar, unzip, xz, gzip, bzip2, cmake
  • Windows
    • 支持架构: x86_64
    • 依赖工具: (TODO)
  • PHP
    • 支持编译版本: 7.4, 8.0, 8.1, 8.2
    • 项目依赖版本8.0, 8.1, 8.2

使用WIP

你正在看的是重构后的 static-php-cli 编译项目,新项目还未完全重构,所以还有大量的扩展没有完成。 你可以阅读使用 bash 编写的仅为 Linux 系统使用的静态编译脚本和 Docker详见 bash-version 分支。 旧版本未来将会切换为次要版本,提供有限支持。

未来会提供一个直接可使用的 phar 包和一个 phpmicro 打包的二进制文件,你可以直接从 Release 中获取并使用:

支持的扩展情况

扩展支持列表

编译

chmod +x spc
# 检查环境依赖并根据提示的命令安装缺失的编译工具TODO
./spc doctor
# 拉取所有依赖库
./spc fetch --all
# 构建包含 bcmath,openssl,tokenizer,sqlite3,pdo_sqlite,ftp,curl 扩展的 php-cli 和 micro.sfx
./spc build "bcmath,openssl,tokenizer,sqlite3,pdo_sqlite,ftp,curl" --build-all

使用 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 支持

更多功能和特性正在陆续支持中,详见: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%