我想使用他们的API下载私人GitLab存档库存档。我使用PHP和cURL来做到这一点。我可以使用以下代码:来自GitLab的私有存储库存档(tar.gz),通过GitLab的API使用PHP下载,似乎被侵蚀 - 无效校验和
$ch = curl_init(http://example.com/api/v3/projects/64/repository/archive?private_token=private_token_goes_here);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
$output = curl_exec($ch);
$fh = fopen("out.tar.gz", 'w');
fwrite($fh, $output);
fclose($fh);
该代码本身并不复杂且非常标准。
我现在面临的问题是,一旦我尝试解压,使用代码波纹管:
// decompress from gz
$p = new PharData($temp_archive . '.tar.gz');
$p->decompress($temp_archive . '.tar');
// unarchive from the tar
$phar = new PharData($temp_archive . '.tar');
$phar->extractTo($extract_path);
我收到以下错误:
Fatal error: Uncaught exception 'UnexpectedValueException' with message ' in phpfile.php on line 294
UnexpectedValueException: phar error: "path/to/downloaded/archive/temp_archive.tar.gz" is a corrupted tar file (checksum mismatch of file "52 comment=01607149cd460cba6f1ac3003bb7b0c9cb0e2b94
") in phpfile.php on line 294
是的,这是整个错误,我没有删除错误信息。 '
是错误消息。
下载文件的校验和确实无效。经过几个小时的谷歌搜索和论坛浏览,我回到了原点。我不知道它有什么问题。
如果我使用终端(我在MAC OS Build 12E55上)解压归档文件,它将正常解压缩。这些文件都在那里,我什么都没有收到任何错误。
我试着手动从GitLab下载档案,并使用PHP解压缩(我得到相同的错误)。
我尝试使用终端创建一个* .tar.gz文件,并使用PHP解压缩(我没有收到错误,并且正常拆包)。
我尝试上传一个使用终端创建的文件,然后使用PHP下载它,之后我再次使用PHP解压它,并且没有收到任何错误。
我只能假设,我可以:
- 不使用他们的API正常
- 没有设置正确的标题 - 虽然我曾试图设置:
- 内容类型:应用程序/ octet-stream
- Content-Type:application/x-tar
- Content-Transfer-Encoding:binary ...等等。当使用二进制头时,我把内容放入的文件被设置为
'wb'
。但是,没有运气。
而且最后可能是因为他们的API可能无法正常工作,但我对此表示怀疑。
而且在正确的方向微调是非常感谢。
好的,那么我的选择是什么?我正在使用'当前PHP版本:5.5.9-1ubuntu4.7'。从我得到的错误消息中,这与错误链接中发布的错误消息完全相同,似乎没有正确固定(?)。 [email protected]表示应该在'd380d1cb1ba48c41682f749692b78a10e91dd070(5.5.24 +)中修复''我使用的是GitLab,而不是Hub,但我认为他们使用的是相同的代码库。 – Andrew
升级到5.5.24,使用'system'调用或使用Pear的'Archive_Tar' –
我正在使用5.5.9,正如我上面所说的。愚蠢的问题,是默认情况下在PHP中包含Archive_Tar还是我需要安装它? – Andrew