You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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二进制,具体步骤如下:

  1. 准备FrankenPHP源码环境

    • 克隆FrankenPHP仓库:
      git clone https://github.com/dunglas/frankenphp.git
      cd frankenphp
      
  2. 将自定义扩展加入PHP源码树

    • 将你的扩展源码目录复制到php/ext下,例如:
      cp -r /path/to/your/ext my_ext php/ext/
      
  3. 重新配置并编译PHP

    • 进入PHP源码目录,更新配置脚本:
      cd php
      ./buildconf --force
      
    • 配置PHP编译参数,启用你的扩展并指定mpfr依赖(若系统已全局安装mpfr可省略路径):
      ../configure --enable-my-ext --with-mpfr=/path/to/mpfr [保留FrankenPHP默认的其他配置参数]
      
    • 编译PHP:
      make -j$(nproc)
      
  4. 重新构建FrankenPHP二进制

    • 返回FrankenPHP根目录,执行Go构建命令:
      CGO_ENABLED=1 go build -o frankenphp ./cmd/frankenphp/
      
  5. 验证扩展加载状态

    • 运行以下命令查看已加载的PHP扩展列表,确认你的扩展存在:
      ./frankenphp php -m
      

关键说明

  • 直接使用系统php-config的参数构建无效,因为FrankenPHP使用独立编译的静态PHP环境,而非系统PHP。
  • 确保你的扩展与FrankenPHP内置的PHP版本兼容(可查看仓库中php目录的版本标识)。
  • 若需要静态链接mpfr库,在configure时需添加静态链接相关参数,避免运行时依赖外部库。

内容的提问来源于stack exchange,提问作者Tyralcori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:14:59