Téléchargement de fichier

Téléchargement de fichier - PHP - Programmation

Marsh Posté le 01-06-2005 à 08:28:42    

Salut,
 
Je fais une exportation au format CSV d'une base de données MySQL, et une fois que j'ai concaténé toutes les données dans une variable, je voudrais faire un téléchargement forcé sans passer par la création d'un fichier sur le serveur.
 
Est ce que c'est possible ? Ou faut-il obligatoirement passer par un fichier sur le serveur ?

Reply

Marsh Posté le 01-06-2005 à 08:28:42   

Reply

Marsh Posté le 01-06-2005 à 09:01:32    

Ca ne pose normalement pas de problèmes.
 
1- Il faut envoyer le type MIME application/octet-stream pour forcer le téléchargement (dans le header Content-Type)
2- Utiliser le header Content-Disposition pour définir le nom du fichier
3- Penser à renseigner le header Content-Length avec la taille du fichier de sortie (donc la taille de la variable)
4- "Imprimer" le contenu de la variable directement dans le flux de sortie. Tout ce qui est mis dans le flux de sortie sera envoyé comme contenu.
 
Normalement, c'est suffisant


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 01-06-2005 à 09:20:31    

Tu récupères comment la taille de la variable, je trouve pas :/
 
Par contre j'ai un autre problème :
Une fois sur 2, quand je clique sur le bouton d'exportation, ca me propose mon fichier data.php (qui gere l'exportation), et la fois d'apres mon fichier csv -_-
 

Reply

Marsh Posté le 01-06-2005 à 09:29:35    

ah bah non, j'ai retrouvé c'etait strlen() !
 
Par contre j'ai toujours mon 2ème problème.

Reply

Marsh Posté le 01-06-2005 à 09:34:30    

Doit surment y avoir un truc comme quoi ton data.php envoi un stream avant l'autre de temps en temps . mais sans le code on peu rien y faire


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 01-06-2005 à 09:39:58    

J'utilise les templates (vTemplate) et je fais la sortie HTML uniquement à la fin du code php. Ca pourrait venir de ça ?

Reply

Marsh Posté le 01-06-2005 à 09:54:56    

Tu peux nous copier coller le bout de code qu'on puisses voir + facilement parce que dans le flou dur dur :). Petite question par contre   :??: , pourquoi utiliser les templates sur cette page, si pas d'affichage ecran ca sert à rien ou c moi qui me plante  :sweat:  ?

Reply

Marsh Posté le 01-06-2005 à 10:04:38    

l'exportation se fait en cliquant sur un bouton de formulaire instantanément (et recharge la même page) donc il me faut bien une interface web :)
 
voilà un bout du code
 
data.php

Code :
  1. [...]
  2. if(isset($_POST['export']) && isset($_POST['data'])) {
  3. extract($_POST);
  4. switch($data) {
  5.  case 'ville' :
  6.   $sql->sql("SELECT * FROM agi_ville" );
  7.   break;
  8.  case 'fonds' :
  9.   $sql->sql("SELECT * FROM agi_fcomm" );
  10.   break;
  11.  case 'annonce' :
  12.   $sql->sql("SELECT * FROM agi_annonce" );
  13.   break;
  14. }
  15. //Récupération des données
  16. $csv="";
  17. while($contenu=$sql->fetch_row()) {
  18.  foreach($contenu as $valeur) {
  19.   $csv.=$valeur.";";
  20.  }
  21.  $csv.="\r\n";
  22. }
  23. //Ecriture du fichier
  24. //$handle = fopen("./data/".$data.".csv", "w" );
  25. //fwrite($handle, $csv);
  26. //fclose($handle);
  27. //Téléchargement forcé
  28. header("Content-disposition: attachment; filename=".$data.".csv" );
  29. header("Content-Type: application/octet-stream" );
  30. header("Content-Transfer-Encoding: text/csv" );
  31. header("Content-Length: ".strlen($csv));
  32. header("Pragma: no-cache" );
  33. header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0" );
  34. header("Expires: 0" );
  35. echo $csv;
  36. //readfile("./data/".$data.".csv" );
  37. }
  38. $vtp->closeSession($handle,"data" );
  39. require_once("./include/footer.inc.php" );


 
footer.inc.php

Code :
  1. $handleFooter = $vtp->Open("./template/footer.vtp" );
  2. $vtp->addSession($handleFooter,"footer" );
  3. $vtp->closeSession($handleFooter,"footer" );
  4. $vtp->Display($handleHead);
  5. $vtp->Display($handle);
  6. $vtp->Display($handleFooter);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed