Php 使用GitLab'下载GitLab归档存储库;的API,似乎已损坏

Php 使用GitLab'下载GitLab归档存储库;的API,似乎已损坏,php,curl,gitlab,Php,Curl,Gitlab,我正在使用cURL从GitLab下载一个存储库,使用它们的API。所有这些都是使用PHP完成的。代码如下: $zipResource = fopen('archive.zip', 'w'); $ch = curl_init("http://example.com/api/v3/projects"); curl_setopt($ch, CURLOPT_HTTPHEADER, array("PRIVATE-TOKEN: private_token_goes_here")); curl_seto

我正在使用cURL从GitLab下载一个存储库,使用它们的API。所有这些都是使用PHP完成的。代码如下:

$zipResource = fopen('archive.zip', 'w');

$ch = curl_init("http://example.com/api/v3/projects");

curl_setopt($ch, CURLOPT_HTTPHEADER, array("PRIVATE-TOKEN: private_token_goes_here"));

curl_setopt($ch, CURLOPT_URL, "http://example.com/api/v3/projects/64/repository/archive");

curl_setopt($ch, CURLOPT_FILE, $zipResource);

curl_exec($ch);

curl_close($ch);
简要概述:创建一个空的zip文件。连接到服务器,获取存档并将其写入zip文件

存档文件出现在服务器上,我可以下载它,我可以在双击它时解压它,所有文件都在那里,一切似乎都井然有序

但是,当我尝试使用终端解压时,会弹出以下错误:

Archive:  archive.ZIP
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
到目前为止,我尝试的是:

将标题设置为
“内容类型:应用程序/zip”
。将标题设置为
“内容传输编码:二进制”
(存档文件类型为
'wb'//Binary
)或
“内容类型:应用程序/八位字节流”
,依此类推。最终的结果总是一样的,这意味着我在尝试解压缩归档文件时会遇到上面提到的错误

我只能假设我没有正确地使用cURL,没有正确地设置头部,或者它们的API有问题(可能性很小)


非常感谢您向正确的方向轻推。

我在Gitlab中遇到了同样的问题。在我的情况下,作为tar下载效果很好。我还发现下载的ZIP文件实际上包含所有数据,但已损坏。如果安装了Java,ZIP文件中的数据仍可恢复:

jar xvf corrupted-zip-file.zip

你正在下载的可能是一个压缩的TARball。
您应该将
.zip
扩展名放在正在访问的URL的末尾

那么可能是因为他们的api/后端系统在创建zip文件时出错了:D