Bonjour à tous,

Je rencontre un problème:

Je voudrais télécharger un fichier .zip que je récupère d'un API. Pour cela voici le code que j'utilise:

$curl = curl_init();
 
curl_setopt_array($curl, array(
    CURLOPT_URL => "URL",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => array(
        rtrim($token, "\r\n")
    ),
));
 
$response = curl_exec($curl);
$fichierZipPhotos=json_decode(curl_exec($curl), true);
 
$name=$numeroAffaire.'_'.$origine.'_'.$numeroNC.'_'.$titre;
header('Cache-Control: public');
header('Content-type: application/zip');
header('Content-Disposition: attachment; filename='.$name.'.zip');
 
 
 
 
curl_close($curl);
echo $response;


Cependant, cela me télécharge un fichier (avec le bon nom) en .html. Je ne comprends pas pourquoi. Comment avoir le fichier en .zip ?

Merci
Modérateur
Bonjour,

il faut d'abord créer une archive zip (temporairement)

$zip = new ZipArchive;
$zip->open('truc.zip', ZipArchive::CREATE);
$zip->addFile('files/test.html'); // ajoute un fichier au zip
$zip->addFromString('test.txt', 'contenu du fichier ici'); // ajoute un fichier à partir d'une string
$zip->close();


puis l'envoyer au client:


header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=truc.zip');
header('Content-Length: ' . filesize('truc.zip'));
readfile('truc.zip');


et éventuellement supprimer le fichier:


unlink('truc.zip');
Bonjour kustolovic,
Merci pour ta réponse, cependant je n'arrive pas à tout comprendre et à l'adapter à mon code...
À quoi correspondent test.html et test.txt ?

Merci
Modérateur
Et l'eau,

En Fait Kustolovic t'a indiqué 2 manières de faire pour insérer un fichier dans ton archive. Selon ton code, j'utiliserai la méthode "addFromString" et ça devrait être ceci si je dis pas de bétise :

//....
$zip->addFromString('output.json', $fichierZipPhotos);
//....


@kustolovic : Perso, j'ai tendance à faire ceci (identifier un problème de droits).

if ($zip->open($export, \ZipArchive::CREATE)!== true) {
    throw new \Exception("Impossible d'ouvrir le fichier <$export>\n");
}