Téléchargement par header

Résolu
Bonjour,

Je cherche à télécharger un fichier par header (un zip).

J'arrive à télécharger mon zip, mais le problème est que lorsque je l'ouvre, un message d'erreur m'indique que "Le fichier ne peut être ouvert comme une archive". Pourtant, lorsque je l'ouvre via FileZilla, il n'y a aucun problème, je peux consulter normalement mon fichier.

Mon code :

header('Content-Disposition: attachment; filename="fichier.zip"');
header("Content-Type: application/zip");
header("Content-Length: " . filesize('fichier.zip'));
header("Connection: close");


Merci pour votre aide,

hcp7kuz

1 réponse

  1. Salut,

    Ton code PHP n'envoie aucune données, il faut utiliser la fonction readfile pour envoyer le fichier à la suite des header.
    https://www.php.net/manual/fr/function.readfile.php
    (voir l'exemple de la doc)

    Bonne journée,
    0
    1. Merci de ta réponse, mais le problème persiste, toujours la même erreur avec ce code :

      header('Content-Description: File Transfer');
      header('Content-Type: application/octet-stream');
      header('Content-Disposition: attachment; filename="fichier.zip"');
      header('Expires: 0');
      header('Cache-Control: must-revalidate');
      header('Pragma: public');
      header('Content-Length: ' . filesize("fichier.zip"));
      readfile("fichier.zip");
      header("Connection: close");
      0
    2. Le header("Connection: close"); après readfile me semble inutile.
      Le type Mime application/zip semblait également mieux correspondre que application/octet-stream

      Le fichier zip est-il dans le même dossier que le fichier php ? Si non, il faut renseigner le chemin vers le fichier zip dans la fonction readfile.
      0
    3. J'ai enlevé le header("Connection: close"); et remplacer le type octet-stream par zip, et ça marche !

      Merci pour ton aide.
      0