PharData offsetExists在文件名前缀为“。\”

时间:2015-08-26 11:36:37

标签: php gzip

我有一个从我们必须实现的外部API下载的.tar.gz文件。它包含对象的图像 我不确定他们是如何设法以这种方式压缩它的,但文件基本上以“当前目录”为前缀。在WinRAR中看起来像这样:
WinRAR compressed files
就像在7-Zip中一样,注意.tar第一级和“。”第二级:
7-Zip Top level - > 7-Zip tar level - > enter image description here

致电

$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不存在

异常。

无法以不同方式格式化存档。有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用Archive_Tar结束。 PHP的源代码中肯定有问题,但我不认为这是"正常"包装.tar的方式 不幸的是,我不太擅长C,但它可能在hereline 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中一样。