MacBookPro安装RarArchive失败求助:编译报错问题排查
MacBook Pro安装PHP RarArchive扩展编译失败的解决办法
问题根源
你碰到的编译错误,核心是当前的rar扩展源码没适配你用的高版本PHP:
zend_resolve_path函数在PHP 8及以上版本里,参数数量从2个改成了1个,但旧版扩展还在传2个参数,直接导致编译报错;- 那个类型格式警告,也是因为新旧PHP版本的类型定义不兼容导致的。
具体解决步骤
1. 放弃直接用pecl安装,手动获取适配版源码
先查清楚你的PHP版本:
php -v
去PECL的rar扩展归档页面,找对应你PHP版本的分支,或者找社区已经修复过参数问题的源码包下载到本地。
2. 手动编译修复源码
解压下载的源码包,进入目录后执行:
# 生成编译配置文件,替换成你实际的phpize路径,比如brew装的PHP可能在/usr/local/bin/phpize phpize # 配置编译参数,同样替换成你的php-config路径 ./configure --with-php-config=/path/to/php-config
接下来修改rar_stream.c文件里的两个问题:
- 找到第787行,把原来的
zend_string *arc_str = zend_resolve_path(tmp_archive, tmp_arch_len);
改成适配新版本PHP的写法:
zend_string *arc_str = zend_resolve_path(tmp_archive);
- 再找到第170行的格式警告处,把对应输出语句里的
%lu格式符改成%llu,匹配uint64类型:
// 比如原语句类似这样,修改格式符即可 fprintf(stream, "... %llu ...", self->file_size, self->cursor);
改完之后继续编译安装:
make make install
3. 启用扩展
用php --ini找到你的php.ini文件位置,打开后添加一行:
extension=rar.so
最后重启PHP或者你的Web服务(比如Apache、Nginx)就可以了。
4. 备选方案:换用其他解压方式
如果编译还是有问题,也可以考虑用PHP内置的ZipArchive(如果你的压缩文件需求可以用它替代),或者找纯PHP编写的RAR解压库,不用编译扩展也能解决问题。
内容的提问来源于stack exchange,提问作者Uno
相关产品推荐
相关产品推荐

