PHP 和依赖扩展的静态编译

博主分享了如何将PHP编译成静态二进制文件,以解决PHP扩展在不同环境部署的难题。经过一个月的探索,最终在Alpine发行版上成功实现。该过程涉及自动化下载、编译依赖,并通过Docker容器确保跨平台兼容。开源脚本可在GitHub找到。
摘要由CSDN通过智能技术生成

有一天我在使用 Swoole 写框架的时候意识到这么一个问题,虽然像 Swoole 扩展一样,PHP 很多扩展都能很好的提供一些特性去方便开发者开发和使用,但同时也给一些部署和分发上造成了一定困难:不是每台 Linux 主机和发行版都有 PHP环境,即使有 PHP 环境,也可能没有自己需要的 C 语言写的扩展。那么我们为何不把 PHP 直接编译成像 Go 语言程序那样静态链接的呢?

当然目前研究阶段仅限于把 PHP 解析器本体编译为静态二进制文件,还没有研究怎么把 PHP 代码也编译进去。

于是就有了长达一个多月的折腾,最后终于在 Alpine 发行版上编译成功,其实 PHP 本身如果不带任何扩展,就是 `--disable-all` 的话,是很简单就可以静态编译的,但 PHP 的灵魂就是一堆好用的扩展,没有扩展也没有什么意义。

这次静态编译的研究思路大概是:

  1. 尽可能使用系统的包管理安装依赖包,如果没有则再手动编译。
  2. 编译扩展时直接从 pecl 下载,保持版本更新。
  3. 尽可能地抽象和简化编译流程。
  4. 自动化下载和编译所有内容。

不过最后为了方便大多数用户在不同操作系统下自己编译 Linux 的静态二进制,我将脚本改为了在 Docker 里运行,这样比如像我这样的老年 Mac 党也可以比较舒适地调整脚本。

最后附上脚本开源地址:

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值