Я хочу скачать частный архив репозитория 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, и я не получаю ошибок.
Я могу только предположить, что я либо:
'wb'
, Тем не менее, не повезло.И, наконец, может быть, что их API не работает должным образом, хотя я сомневаюсь в этом.
И подталкивание в правильном направлении очень ценится.
Это похоже на ошибку в PharData
Реализация класса, которая была исправлена совсем недавно, смотрите https://bugs.php.net/bug.php?id=64343.
Похоже, что Github использует pax
формат для файлов tar вместо ustar
формат. Для описания на tar
форматы, см .: https://github.com/libarchive/libarchive/wiki/FormatTar
Других решений пока нет …