PHP-Tar库不直接支持.tar.gz,需先解压gzip层;pear/archive_tar需手动配置VCS仓库和classmap自动加载,而php-tar/php-tar用纯PHP实现gzip解包但API不同。

PHP-Tar 库本身不依赖 phar 或 tar 扩展,但 Composer 加载失败通常是因为自动加载配置缺失或类名映射错误——不是库不能用,而是没被正确识别。
确认 PHP-Tar 的正确包名与安装方式
PHP-Tar 并非官方 Packagist 标准库,主流可用的是 pear/archive_tar(PEAR 风格)或更现代的 php-tar/php-tar(GitHub 仓库直引)。直接运行 composer require pear/archive_tar 会失败,因为 Packagist 上已归档该包;必须显式指定 VCS 源:
-
composer require pear/archive_tar:dev-master不生效 —— Packagist 已移除该包,Composer 找不到元数据 - 正确做法是添加仓库配置:
"repositories": [ { "type": "package", "package": { "name": "pear/archive_tar", "version": "1.4.14", "dist": { "url": "https://github.com/pear/Archive_Tar/archive/1.4.14.tar.gz", "type": "tar" }, "autoload": { "classmap": ["Archive/Tar.php"] } } } ] - 然后执行
composer require pear/archive_tar:1.4.14
手动引入 Tar.php 后仍报 Class not found?检查 autoload 规则
pear/archive_tar 使用传统 PEAR 命名(Archive_Tar 类,文件路径 Archive/Tar.php),但默认 PSR-4 不匹配。Composer 的 classmap 是唯一可靠方式:
- 确保
composer.json中有"autoload": { "classmap": ["vendor/pear/archive_tar/Archive/Tar.php"] } - 运行
composer dump-autoload(不是install或update)才能生效 - 不要尝试用
psr-4映射"Archive\": "vendor/pear/archive_tar/Archive/"—— 类名是Archive_Tar,不是ArchiveTar,命名空间不兼容
读取/解压 tar 包时提示 “invalid gzip header” 或 “not a tar file”
这是因为 Archive_Tar 默认只处理纯 .tar,不支持 .tar.gz 或 .tgz —— 它不调用系统 gzip,也不依赖 PHP zlib 扩展(即使开启也无视)。解决路径只有两条:
立即学习“PHP免费学习笔记(深入)”;
- 提前用命令行解压:
gunzip archive.tar.gz && php script.php,再让Archive_Tar处理archive.tar - 换用
php-tar/php-tar(需手动 require):"repositories": [ { "type": "vcs", "url": "https://github.com/llaville/php-tar" } ],然后composer require php-tar/php-tar:dev-master,它通过纯 PHP 实现 gzip 解包,无扩展依赖 - 注意:
php-tar/php-tar的 API 完全不同,创建实例是new PhpTarTar($filename),不是new Archive_Tar()
真正卡住人的地方,往往不是“能不能解 tar”,而是默认以为 .tar.gz 能直接喂给库 —— 实际上两个主流 PHP-Tar 方案都要求你先分离压缩与归档层。别省那一步 gunzip 或 zlib_decode() 调用。



















