当前位置: 首页 > 后端技术 > PHP

PHP和依赖扩展的静态编译

时间:2023-03-29 17:42:17 PHP

有一天在使用Swoole写框架的时候意识到了这样一个问题,虽然很多PHP扩展和Swoole扩展一样可以提供一些特性方便开发者开发使用,但是同时,这也给部署和分发造成了一些困难:并不是每个Linux主机和发行版都有PHP环境,即使有PHP环境,也可能没有你需要的用C语言编写的扩展。那么我们为什么不直接编译PHP,像Go语言程序那样静态链接呢?当然,目前的研究阶段仅限于将PHP解析器主体编译成静态二进制文件,尚未研究如何将PHP代码编译进去。于是折腾了一个多月,终于在Alpinerelease版本上编译成功。其实如果PHP本身没有任何扩展,就是--disable-all,静态编译很简单,但是PHP的灵魂就是一堆好用的扩展,没有扩展,它不使很有意义。本次静态编译的研究思路大概是:尽量利用系统的包管理安装依赖包,没有则手动编译。编译扩展时直接从pecl下载,保持版本更新。尽可能抽象和简化编译过程。自动下载并编译所有内容。不过最后为了方便大部分用户在不同的操作系统下自己编译Linux的静态二进制文件,我把脚本改为在Docker中运行,让像我这样的Mac老手可以更舒服地调整脚本。最后附上脚本的开源地址:https://github.com/crazywhale...