8791 sujets

Développement web côté serveur, CMS

Bonjour,
Nouveau dans le monde du PHP j'éprouve quelques difficultés pour le codage de mon site web. Je vous remercie d'avance pour vos conseils !!!

Mon problème est le suivant : Je souhaite lancer le téléchargement d'un fichier .zip (contenu protégé par un mot de passe) grâce au script suivant. Cependant si le fichier est bien téléchargé il n'est pas possible de l'ouvrir, un avertissement apparaissant dans Winrar expliquant que l'archive est corrompue ("Fin de l'archive non attendue").
J'ai passé pas mal d'heures à essayer de comprendre et à chercher une solution mais rien ne semble fonctionner... Il faut dire que je ne comprends pas grand chose au fonctionnement des headers...

Voici mon code :
 $nomFichier = "essai0".$_GET['id'].".zip";
      $urlComplete= "http://monsite.free.fr/downloadess/".$nomFichier;
      ob_clean();
      header("Content-Description: File Transfer");
      header('Content-type: application/octet-stream');
      header('Content-disposition: attachment; filename="' . $nomFichier . '";');
      //header('Content-Transfer-Encoding: binary');
      //header('Pragma: no-cache');
      //header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
      //header('Expires: 0');
      header('Content-Length: ' . filesize($urlComplete));
      flush();
      //Lecture du fichier à envoyer :
      readfile($urlComplete);
      exit;


J'ai essayé les contrôles de cache sans succès, rajouté"ob_clean" sans succès... Mis mon dossier de documents en 777... mis content-type : application/zip...Rien ne marche...

Merci d'avance pour votre aide très très précieuse !!!
Administrateur
Bonjour et bienvenue,

et le même téléchargement avec un Zip SANS mot de passe? Ou avec 7-zip s'ouvrant par défaut? Si tu testes un Zip en local, c'est OK? (problème de RAM corrompue en général, là c'est ton PC qui a un souci)

Sinon Alsacreations.com n'est pas spécialisé dans le développement web pur et et dur mais dans les Standards (CSS) et l'accessibilité, tu risques de ne pas recevoir beaucoup de réponses Smiley ohwell
bonjour,
tu peux essayer un simple lien :
<a href="http://www.tonsite/chemin/fichier">télécharger</a>

ou par l'envoi des headers
code :
/* Recuperation du fichier */
$filename = $_GET['file'];
 
/* Ici tu peux rajouter un test d'existance de fichier */
 
/* Pour IE */
if(ini_get('zlib.output_compression'))
  ini_set('zlib.output_compression', 'Off');
 
/* Extraction de l'extension du fichier */
$file_extension = strtolower(substr(strrchr($filename,"."),1));
 
switch( $file_extension ){
  case "pdf": $ctype="application/pdf"; break;
  case "exe": $ctype="application/octet-stream"; break;
  case "zip": $ctype="application/zip"; break;
  case "doc": $ctype="application/msword"; break;
  case "xls": $ctype="application/vnd.ms-excel"; break;
  case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  case "gif": $ctype="image/gif"; break;
  case "png": $ctype="image/png"; break;
  case "jpeg":
  case "jpg": $ctype="image/jpg"; break;
  default: $ctype="application/force-download";
}
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
 
header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();

Modifié par vanbom (16 May 2008 - 14:20)
Merci,
Maintenant ça ne me télécharge plus que quelques centaines d'octets... C'est pas grave je vais passer par des liens plus classiques.
Merci pour votre aide !