FrankenPHP中如何集成自定义PHP Zend扩展?
如何将自定义Zend扩展集成到FrankenPHP中
问题背景
自定义的依赖mpfr库的C语言Zend扩展在php-cli、php-fpm中正常运行,但FrankenPHP无法识别该扩展;尝试通过CGO_CFLAGS/CGO_LDFLAGS注入扩展构建Go二进制失败,希望将扩展像opcache、gmp那样编译进FrankenPHP二进制。
解决方案
FrankenPHP采用静态链接PHP的方式,因此必须将自定义扩展静态编译进其内置的PHP环境,再重新构建FrankenPHP二进制,具体步骤如下:
准备FrankenPHP源码环境
- 克隆FrankenPHP仓库:
git clone https://github.com/dunglas/frankenphp.git cd frankenphp
- 克隆FrankenPHP仓库:
将自定义扩展加入PHP源码树
- 将你的扩展源码目录复制到
php/ext下,例如:cp -r /path/to/your/ext my_ext php/ext/
- 将你的扩展源码目录复制到
重新配置并编译PHP
- 进入PHP源码目录,更新配置脚本:
cd php ./buildconf --force - 配置PHP编译参数,启用你的扩展并指定mpfr依赖(若系统已全局安装mpfr可省略路径):
../configure --enable-my-ext --with-mpfr=/path/to/mpfr [保留FrankenPHP默认的其他配置参数] - 编译PHP:
make -j$(nproc)
- 进入PHP源码目录,更新配置脚本:
重新构建FrankenPHP二进制
- 返回FrankenPHP根目录,执行Go构建命令:
CGO_ENABLED=1 go build -o frankenphp ./cmd/frankenphp/
- 返回FrankenPHP根目录,执行Go构建命令:
验证扩展加载状态
- 运行以下命令查看已加载的PHP扩展列表,确认你的扩展存在:
./frankenphp php -m
- 运行以下命令查看已加载的PHP扩展列表,确认你的扩展存在:
关键说明
- 直接使用系统
php-config的参数构建无效,因为FrankenPHP使用独立编译的静态PHP环境,而非系统PHP。 - 确保你的扩展与FrankenPHP内置的PHP版本兼容(可查看仓库中
php目录的版本标识)。 - 若需要静态链接mpfr库,在
configure时需添加静态链接相关参数,避免运行时依赖外部库。
内容的提问来源于stack exchange,提问作者Tyralcori
相关产品推荐
相关产品推荐

