2021-05-07 10:06:00 +08:00
|
|
|
|
# static-php-cli
|
2023-03-19 14:05:30 +08:00
|
|
|
|
|
2022-10-05 08:47:05 +08:00
|
|
|
|
Compile A Statically Linked PHP With Swoole and other Extensions. [English README](README-en.md)
|
2021-05-06 14:44:16 +08:00
|
|
|
|
|
2021-06-05 23:48:37 +08:00
|
|
|
|
编译纯静态的 PHP Binary 二进制文件,带有各种扩展,让 PHP-cli 应用变得更便携!
|
|
|
|
|
|
|
2023-03-31 00:16:40 +08:00
|
|
|
|
同时可以使用 micro 二进制文件,将 PHP 源码和 PHP 二进制构建为一个文件分发!(由 [dixyes/phpmicro](https://github.com/dixyes/phpmicro) 提供支持)
|
2022-05-16 17:02:57 +08:00
|
|
|
|
|
2023-03-18 14:19:45 +08:00
|
|
|
|
注:只能编译 CLI 模式,暂不支持 CGI 和 FPM 模式。
|
2021-04-26 16:32:26 +08:00
|
|
|
|
|
2022-01-10 10:14:06 +08:00
|
|
|
|
[]()
|
2021-04-28 00:03:14 +08:00
|
|
|
|
|
2021-07-28 14:26:28 +08:00
|
|
|
|
## 编译环境需求
|
2022-05-16 17:02:57 +08:00
|
|
|
|
|
2023-03-18 14:19:45 +08:00
|
|
|
|
是的,本项目采用 PHP 编写,编译前需要一个 PHP 环境,比较滑稽。
|
|
|
|
|
|
但本项目默认可通过自身构建的 micro 和 static-php 二进制运行,其他只需要包含 tokenizer 扩展和 PHP 版本大于等于 8.0 即可。
|
2022-04-17 22:07:56 +08:00
|
|
|
|
|
2023-03-18 14:19:45 +08:00
|
|
|
|
- Linux
|
|
|
|
|
|
- 支持架构: aarch64, amd64
|
|
|
|
|
|
- 支持发行版: alpine, ubuntu, centos
|
2023-03-18 18:26:18 +08:00
|
|
|
|
- 依赖工具: make, bison, flex, pkg-config, git, autoconf, automake, tar, unzip, gzip, bzip2, cmake
|
2023-03-18 14:19:45 +08:00
|
|
|
|
- macOS
|
|
|
|
|
|
- 支持架构: arm64, x86_64
|
|
|
|
|
|
- 依赖工具: make, bison, flex, pkg-config, git, autoconf, automake, tar, unzip, xz, gzip, bzip2, cmake
|
|
|
|
|
|
- Windows
|
|
|
|
|
|
- 支持架构: x86_64
|
|
|
|
|
|
- 依赖工具: (TODO)
|
|
|
|
|
|
- PHP
|
2023-03-31 00:16:40 +08:00
|
|
|
|
- 支持编译版本: 7.4, 8.0, 8.1, 8.2
|
|
|
|
|
|
- 项目依赖版本:8.0, 8.1, 8.2
|
2022-05-16 17:02:57 +08:00
|
|
|
|
|
2023-03-18 14:19:45 +08:00
|
|
|
|
## 使用(WIP)
|
2022-05-16 17:02:57 +08:00
|
|
|
|
|
2023-03-18 14:19:45 +08:00
|
|
|
|
> 你正在看的是重构后的 static-php-cli 编译项目,新项目还未完全重构,所以还有大量的扩展没有完成。
|
|
|
|
|
|
> 你可以阅读使用 bash 编写的仅为 Linux 系统使用的静态编译脚本和 Docker,详见 bash-version 分支。 旧版本未来将会切换为次要版本,提供有限支持。
|
2021-04-26 16:32:26 +08:00
|
|
|
|
|
2023-03-18 14:19:45 +08:00
|
|
|
|
未来会提供一个直接可使用的 phar 包和一个 phpmicro 打包的二进制文件,你可以直接从 Release 中获取并使用:
|
2022-05-15 00:57:14 +08:00
|
|
|
|
|
2023-03-19 14:05:30 +08:00
|
|
|
|
### 编译
|
|
|
|
|
|
|
2022-05-15 00:57:14 +08:00
|
|
|
|
```bash
|
2023-03-18 17:34:25 +08:00
|
|
|
|
chmod +x spc
|
2023-03-31 00:16:40 +08:00
|
|
|
|
# 检查环境依赖,并根据提示的命令安装缺失的编译工具(TODO)
|
|
|
|
|
|
./spc doctor
|
2023-03-18 14:19:45 +08:00
|
|
|
|
# 拉取所有依赖库
|
2023-03-18 17:34:25 +08:00
|
|
|
|
./spc fetch --all
|
2023-03-19 14:13:24 +08:00
|
|
|
|
# 构建包含 bcmath,openssl,tokenizer,sqlite3,pdo_sqlite,ftp,curl 扩展的 php-cli 和 micro.sfx
|
|
|
|
|
|
./spc build "bcmath,openssl,tokenizer,sqlite3,pdo_sqlite,ftp,curl" --build-all
|
2022-05-15 00:57:14 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
2023-03-19 14:05:30 +08:00
|
|
|
|
### 使用 php-cli
|
|
|
|
|
|
|
2023-03-31 00:16:40 +08:00
|
|
|
|
> php-cli 是一个静态的二进制文件,类似 Go、Rust 语言编译后的单个可移植的二进制文件。
|
|
|
|
|
|
|
2023-03-19 14:05:30 +08:00
|
|
|
|
采用参数 `--build-all` 或不添加 `--build-micro` 参数时,最后编译结果会输出一个 `./php` 的二进制文件,此文件可分发、可直接使用。
|
2023-03-31 00:16:40 +08:00
|
|
|
|
该文件编译后会存放在 `buildroot/bin/` 目录中,名称为 `php`,拷贝出来即可。
|
2023-03-19 14:05:30 +08:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2023-03-31 00:16:40 +08:00
|
|
|
|
cd buildroot/
|
2023-03-19 14:05:30 +08:00
|
|
|
|
./php -v
|
|
|
|
|
|
./php -m
|
|
|
|
|
|
./php your_code.php
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 使用 micro.sfx
|
|
|
|
|
|
|
2023-03-31 00:16:40 +08:00
|
|
|
|
> phpmicro 是一个提供自执行二进制 PHP 的项目,本项目依赖 phpmicro 进行编译自执行二进制。详见 [dixyes/phpmicro](https://github.com/dixyes/phpmicro)。
|
|
|
|
|
|
|
2023-03-19 14:05:30 +08:00
|
|
|
|
采用项目参数 `--build-all` 或 `--build-micro` 时,最后编译结果会输出一个 `./micro.sfx` 的文件,此文件需要配合你的 PHP 源码使用。
|
|
|
|
|
|
该文件编译后会存放在 `source/php-src/sapi/micro/` 目录中,拷贝出来即可。
|
|
|
|
|
|
|
|
|
|
|
|
使用时应准备好你的项目源码文件,可以是单个 PHP 文件,也可以是 Phar 文件。
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
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 环境下运行。
|
|
|
|
|
|
|
2023-03-27 00:13:52 +08:00
|
|
|
|
## 项目支持情况
|
2023-03-18 14:19:45 +08:00
|
|
|
|
|
2023-03-27 00:13:52 +08:00
|
|
|
|
- [X] 基础结构编写(采用 `symfony/console`)
|
2023-03-18 14:19:45 +08:00
|
|
|
|
- [X] 错误处理
|
2023-03-18 17:34:25 +08:00
|
|
|
|
- [X] macOS 支持
|
2023-03-18 14:19:45 +08:00
|
|
|
|
- [ ] Windows 支持
|
2023-03-27 00:13:52 +08:00
|
|
|
|
- [X] Linux 支持
|
2023-03-18 20:08:54 +08:00
|
|
|
|
- [X] PHP 7.4 支持
|
2023-03-18 14:19:45 +08:00
|
|
|
|
|
2023-03-31 00:16:40 +08:00
|
|
|
|
更多功能和特性正在陆续支持中,详见:https://github.com/crazywhalecc/static-php-cli/issues/32
|
|
|
|
|
|
|
2023-03-27 00:13:52 +08:00
|
|
|
|
## 支持的扩展情况
|
2023-03-18 14:19:45 +08:00
|
|
|
|
|
2023-03-18 17:34:25 +08:00
|
|
|
|
[扩展支持列表](/ext-support.md)
|
2023-03-18 14:19:45 +08:00
|
|
|
|
|
2023-03-19 14:05:30 +08:00
|
|
|
|
## 贡献
|
|
|
|
|
|
|
|
|
|
|
|
目前支持的扩展较少,如果缺少你需要的扩展,可发起 Issue。如果你对本项目较熟悉,也欢迎为本项目发起 Pull Request。
|
|
|
|
|
|
|
|
|
|
|
|
贡献基本原则如下:
|
|
|
|
|
|
|
|
|
|
|
|
- 项目采用了 php-cs-fixer、phpstan 作为代码规范工具,贡献前请对更新的代码执行 `composer analyze` 和 `composer cs-fix`。
|
|
|
|
|
|
- 涉及到其他开源库的部分应提供对应库的协议,同时对配置文件在修改后采用命令 `sort-config` 排序。有关排序的命令,见文档。
|
|
|
|
|
|
- 应遵循命名规范,例如扩展名称应采取 PHP 内注册的扩展名本身,外部库名应遵循项目本身的名称,内部逻辑的函数、类名、变量等应遵循驼峰、下划线等格式,禁止同一模块混用。
|
|
|
|
|
|
- 涉及编译外部库的命令和 Patch 时应注意兼容不同操作系统。
|
|
|
|
|
|
|
2023-03-18 14:19:45 +08:00
|
|
|
|
## 开源协议
|
|
|
|
|
|
|
|
|
|
|
|
本项目依据旧版本惯例采用 MIT License 开源,新版本采用了部分项目的源代码做参考,特别感谢:
|
|
|
|
|
|
|
2023-03-31 00:16:40 +08:00
|
|
|
|
- [dixyes/phpmicro](https://github.com/dixyes/phpmicro)(Apache 2.0 LICENSE)
|
2023-03-18 17:44:23 +08:00
|
|
|
|
- [dixyes/lwmbs](https://github.com/dixyes/lwmbs)(木兰宽松许可证)
|
2023-03-31 00:16:40 +08:00
|
|
|
|
- [swoole/swoole-cli](https://github.com/swoole/swoole-cli)(Apache 2.0 LICENSE、SWOOLE-CLI LICENSE)
|
2023-03-18 14:19:45 +08:00
|
|
|
|
|
|
|
|
|
|
因本项目的特殊性,使用项目编译过程中会使用很多其他开源项目,例如 curl、protobuf 等,它们都有各自的开源协议。
|
2023-03-18 17:34:25 +08:00
|
|
|
|
请在编译完成后,使用命令 `dump-license`(TODO) 导出项目使用项目的开源协议,并遵守对应项目的 LICENSE。
|
2023-03-31 00:16:40 +08:00
|
|
|
|
|
|
|
|
|
|
## 进阶
|
|
|
|
|
|
|
|
|
|
|
|
本项目重构分支为模块化编写。
|
|
|
|
|
|
|
|
|
|
|
|
This section will be improved after refactor version released.
|