Ubuntu 22.04下加载PHP 7.0.33 zip扩展遇pcre_exec错误求助
解决PHP 7.0.33加载zip.so时出现"undefined symbol: pcre_exec"错误的方案
核心原因
你通过apt-get安装的php7.0-zip是针对系统默认PHP版本编译的,和自定义编译安装到/usr/local的PHP 7.0.33依赖的PCRE库版本、路径不兼容,导致扩展加载时无法找到正确的pcre_exec符号。
具体解决步骤
1. 清理不兼容的apt安装包
先移除系统中与自定义PHP不匹配的zip扩展包:
sudo apt-get remove --purge php7.0-zip sudo apt-get autoremove
2. 基于自定义PHP源码编译zip扩展
使用和你编译PHP 7.0.33相同的环境编译zip扩展,保证依赖一致:
- 找到当初编译PHP 7.0.33的源码目录,进入
ext/zip子文件夹(如果源码中没有该目录,需要从PHP官方下载对应版本的源码包解压) - 调用自定义PHP的
phpize工具生成编译配置:
cd /path/to/php-7.0.33/ext/zip /usr/local/bin/phpize
- 配置编译参数,指定自定义PHP的配置路径:
./configure --with-php-config=/usr/local/bin/php-config
- 编译并安装扩展:
make && sudo make install
3. 配置php.ini加载扩展
编译完成后,zip.so会自动安装到你的PHP扩展目录(可通过/usr/local/bin/php-config --extension-dir查看具体路径),在php.ini中添加或确认以下配置:
extension=zip.so
4. 验证并重启服务
- 执行
/usr/local/bin/php -m,确认zip和pcre扩展都在加载列表中 - 重启Apache服务:
sudo systemctl restart apache2
- 可通过创建phpinfo页面访问,确认zip扩展已正常加载
额外排查点
- 确保当初编译PHP时启用了PCRE支持:编译命令中应包含
--with-pcre(默认启用,若手动禁用过需重新编译PHP) - 检查PCRE库版本一致性:用
ldd /usr/local/bin/php查看PHP依赖的PCRE库路径,确保编译zip扩展时链接的是同一库文件
内容的提问来源于stack exchange,提问作者DaveW
相关产品推荐
相关产品推荐

