curl — архив частного репозитория (tar.gz) из GitLab, загруженный с помощью PHP через API GitLab, кажется поврежденным — неверная контрольная сумма

Я хочу скачать частный архив репозитория GitLab, используя их API. Я использую PHP и cURL, чтобы сделать это. Я могу сделать это, используя следующий код:

$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

Да, в этом вся ошибка, я не вырезал сообщение об ошибке. ' это сообщение об ошибке

Контрольная сумма для загруженного файла действительно недействительна. После нескольких хороших часов поиска в Google и просмотра форума я вернулся к исходной точке. Я понятия не имею, что с этим не так.

Если мне нужно распаковать архив с помощью терминала (я нахожусь на MAC OS Build 12E55), он распакуется нормально. Все файлы есть, и я не получаю никаких ошибок.

Я попытался вручную загрузить архив с GitLab и распаковать его с помощью PHP (я получаю ту же ошибку).

Я попытался создать файл * .tar.gz с помощью терминала и распаковать его с помощью PHP (я не получаю никаких ошибок, и распаковка происходит нормально).

Я попытался загрузить файл, созданный с помощью терминала, и загрузить его с помощью PHP, после чего я распаковал его, снова используя PHP, и я не получаю ошибок.

Я могу только предположить, что я либо:

  • Не правильно использует их API
  • Не правильные заголовки — хотя я пытался установить:
    1. Тип контента: приложение / октет-поток
    2. Тип содержимого: application / x-tar
    3. Content-Transfer-Encoding: бинарный … и так далее. При использовании двоичного заголовка файл, в который я помещал содержимое, был установлен на 'wb', Тем не менее, не повезло.

И, наконец, может быть, что их API не работает должным образом, хотя я сомневаюсь в этом.

И подталкивание в правильном направлении очень ценится.

0

Решение

Это похоже на ошибку в PharData Реализация класса, которая была исправлена ​​совсем недавно, смотрите https://bugs.php.net/bug.php?id=64343.

Похоже, что Github использует pax формат для файлов tar вместо ustar формат. Для описания на tar форматы, см .: https://github.com/libarchive/libarchive/wiki/FormatTar

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]