我有一个从我们必须实现的外部API下载的.tar.gz文件。它包含对象的图像
我不确定他们是如何设法以这种方式压缩它的,但文件基本上以“当前目录”为前缀。在WinRAR中看起来像这样:
就像在7-Zip中一样,注意.tar第一级和“。”第二级:
- > - >
致电
$file = 'archive.tar.gz';
$phar = new PharData($file, FilesystemIterator::CURRENT_AS_FILEINFO);
var_dump($phar->offsetGet('./12613_s_cfe3e73.jpg'));
我得到例外:
无法访问存档'{...} / archive.tar.gz'中的phar文件条目'/12613_s_cfe3e73.jpg'
调用不存在的文件,例如:
var_dump($phar->offsetGet('non-existent.jpg'));
或者在没有目录分隔符的情况下调用它,例如:
var_dump($phar->offsetGet('12613_s_cfe3e73.jpg'));
我得到了
条目12613_s_cfe3e73.jpg不存在
异常。
无法以不同方式格式化存档。有谁知道如何解决这个问题?
答案 0 :(得分:1)
使用Archive_Tar结束。 PHP的源代码中肯定有问题,但我不认为这是"正常"包装.tar的方式 不幸的是,我不太擅长C,但它可能在here(line 1214)或here。
这个库似乎处理得很好,使用这个示例代码:
$file = 'archive.tar.gz';
$zip = new Archive_Tar($file);
foreach ($zip->listContent() as $file) {
echo $file['filename'] . '<br>';
}
结果:
./ 12613_s_f3b483d.jpg
./12613_s_cfe3e73.jpg
./1265717_s_db141dc.jpg
./1265717_s_af5de56.jpg
./1265717_s_b783547.jpg
./1265717_s_35b11f9.jpg
./1265716_s_83ef572.jpg
./1265716_s_9ac2725.jpg
./1265716_s_c5af3e9.jpg
./1265716_s_c070da3.jpg
./1265715_s_4339e8a.jpg
请注意,文件名仍以&#34; ./"为前缀;就像他们在WinRAR中一样。