从GitLab下载的tar.gz创建Phar时提示损坏但可正常打开的问题求助
解决PharData处理GitLab tar.gz时的校验和不匹配问题
我之前也碰到过类似的情况,PharData对tar文件的格式兼容性确实不如WinRar这类专业解压工具,给你几个可行的解决思路:
手动重新打包tar.gz文件
GitLab导出的tar包可能带有PharData不兼容的特殊注释头(错误信息里提到的comment=75d95ae0ea324ccb8a9580c37e88ab98f065a3c3就是GitLab添加的提交哈希注释),先用系统的tar命令解压再重新打包,就能消除这种兼容性问题:# 解压原文件 tar -xzf qa-master-75d95ae0ea324ccb8a9580c37e88ab98f065a3c3.tar.gz # 重新打包成兼容的tar.gz tar -czf fixed_qa.tar.gz qa-master-75d95ae0ea324ccb8a9580c37e88ab98f065a3c3/之后用
fixed_qa.tar.gz实例化PharData,应该就能正常处理了。升级PHP版本或检查Phar配置
旧版本PHP的PharData组件对带有注释的tar文件解析存在bug,建议升级到PHP 7.4及以上的稳定版本,这类兼容性问题在新版本中大多已经修复。另外可以检查php.ini中的phar.readonly配置,确保它设置为Off(虽然主要影响Phar创建,但也可能间接影响解压解析)。改用系统命令或其他扩展处理
如果PharData的问题始终无法解决,可以直接通过PHP调用系统tar命令来解压,绕过PharData的解析限制:// 解压到临时目录 exec('tar -xzf /root/tools/testApp/build/qa-master-75d95ae0ea324ccb8a9580c37e88ab98f065a3c3.tar.gz -C /tmp'); // 后续直接处理/tmp下的解压文件即可这种方式依赖系统环境,但兼容性更强,毕竟WinRar能打开说明文件本身是完好的。
我当时是用第一种方法解决的,重新打包后的tar包完全兼容PharData,你可以优先试试这个方案~
内容的提问来源于stack exchange,提问作者GrahamL
相关产品推荐
相关产品推荐

