Ubuntu20+Apache2环境下PHP7.2无法加载rdkafka扩展问题求助
问题根因
undefined symbol: zend_string_init_interned报错的核心原因是编译rdkafka扩展时使用的PHP开发头文件版本与实际运行的PHP7.2版本不兼容。你之前编译生成的rdkafka.so适配的是高版本PHP(安装路径的20200930是PHP8.0对应的API版本号),手动移动到PHP7.2的扩展目录(API版本20170718)也无法正常加载,两者的Zend内核API完全不匹配。
解决步骤
- 清理旧的错误编译文件与不兼容依赖
首先删除之前生成的错误扩展文件:
卸载系统默认的高版本php-dev包:sudo rm -f /usr/lib/php/20170718/rdkafka.so /usr/lib/php/20200930/rdkafka.sosudo apt purge -y php-dev - 安装PHP7.2对应版本的依赖包
如果系统没有PHP7.2的软件源,先添加源:
安装编译需要的依赖:sudo add-apt-repository ppa:ondrej/php && sudo apt update
执行以下命令验证版本匹配,输出API版本需为sudo apt install -y php7.2-dev librdkafka-dev gcc make pkg-config20170718、PHP版本为7.2.x:phpize -v php-config --version - 重新编译适配PHP7.2的rdkafka扩展
下载兼容PHP7.2的php-rdkafka 4.x版本源码,解压后进入源码目录,依次执行:
此时扩展会自动安装到PHP7.2的扩展目录phpize ./configure --with-php-config=/usr/bin/php-config7.2 make -j$(nproc) sudo make install/usr/lib/php/20170718/下,无需手动移动。 - 配置扩展加载
新增扩展配置文件:
分别为CLI和Apache2的PHP环境启用扩展:echo "extension=rdkafka.so" | sudo tee /etc/php/7.2/mods-available/rdkafka.inisudo ln -s /etc/php/7.2/mods-available/rdkafka.ini /etc/php/7.2/cli/conf.d/20-rdkafka.ini sudo ln -s /etc/php/7.2/mods-available/rdkafka.ini /etc/php/7.2/apache2/conf.d/20-rdkafka.ini - 验证安装并重启服务
执行CLI验证命令,输出rdkafka即说明CLI端扩展加载成功:
重启Apache2服务使Web端配置生效:php -m | grep rdkafkasudo systemctl restart apache2
内容的提问来源于stack exchange,提问作者M a m a D
相关产品推荐
相关产品推荐

