static-php-cli/README.md
2021-06-05 23:48:37 +08:00

2.8 KiB
Raw Blame History

static-php-cli

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

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

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

版本

环境需求

  • 目前在 x86_64 和 aarch64(arm64) 架构上编译成功,其他架构需自行测试
  • 需要 Docker或等我将脚本提出来也可以直接在 Alpine Linux 上使用)
  • 脚本支持编译的 PHP 版本7.2 ~ 8.0

开始

可以直接在旁边的 Release 中下载编译好的二进制。

也可以自己使用 Dockerfile 进行编译构建:

git clone https://github.com/crazywhalecc/static-php-cli.git
cd static-php-cli/docker
docker build -t static-php .

编译之后可以使用下方命令将二进制 PHP 提取出来,用以下方式:

mkdir dist
docker run --rm -v $(pwd)/dist:/dist/ -it static cp php-dist/bin/php /dist/

如果要选择安装的扩展,可以修改 docker/extensions.txt 文件,具体规则如下:

  • 文件内使用 # 可以注释,表示不安装
  • 扩展名一律使用小写,目前默认状态下文件内所列的扩展为支持的扩展,其他扩展暂不支持,如有需求请提 Issue 添加

支持的扩展(对勾为已支持的扩展,未打勾的正在努力兼容)

  • bcmath
  • calendar
  • ctype
  • filter
  • openssl
  • pcntl
  • iconv
  • inotify
  • json
  • mbstring
  • phar
  • curl
  • pdo
  • gd
  • pdo_mysql
  • mysqlnd
  • sockets
  • swoole
  • redis
  • simplexml
  • dom
  • xml
  • xmlwriter
  • xmlreader
  • posix
  • tokenizer
  • zip

目前的问题(待解决的)

  • event 扩展的 sockets 支持不能在静态编译中使用,因为静态内嵌编译暂时没办法调整扩展编译顺序。
  • Swoole 扩展不支持 --enable-swoole-curl,也是因为编译顺序和加载顺序的问题。
  • readline 扩展安装后无法正常使用 php -a,原因还没有弄清楚,可能是静态编译造成的 ncurses 库出现了问题。

Todo List

  • curl/libcurl 扩展静态编译
  • 可自行选择不需要编译进入的扩展
  • php.ini 内嵌或分发
  • i18n国际化脚本本身和 README

运行示例

编译后的状态 image

在不同系统直接运行 Swoft image

参考资料