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

2.5 KiB
Raw Blame History

static-php-cli

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

编译纯静态的 PHP Binary 二进制文件带有各种扩展CLI 模式,暂不支持 CGI 和 FPM 模式)

版本

环境需求

  • 目前在 x86_64 和 aarch64(arm64) 架构上编译成功,其他架构需自行测试
  • 需要 Alpine Linux测试环境为 3.13 版本,其他版本未测试)系统(也就是说需要 musl或 DockerDockerfile 正在完善)
  • WSL2 也是支持的
  • 脚本支持编译的 PHP 版本7.2 ~ 8.0

开始

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

# 自己编译
./static-compile-php.sh
# 完事后在 `php-dist/bin/php` 这个二进制文件可以随意拿着去任何一个 Linux 系统运行了!

# 多 PHP 版本一键编译
./multi-version-compile.sh
# 结束后多个 PHP 版本的二进制文件会在 build/ 目录下。

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

  • 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

参考资料