2010-09-18 8 views
0

J'essaie d'ouvrir un fichier pour l'exportation en tant qu'excel. Je peux voir les données dans firebug mais il n'y a pas d'option pour offrir le fichier à l'utilisateur. Qu'est-ce que j'oublie ici? J'ai inclus mon code qui gère la requête etc. et accueillerait vos commentaires. Un grand merciles données de sortie en tant que fichier excel

header("Content-Type: application/force-download"); 
header("Content-Type: application/octet-stream"); 
header("Content-Type: application/download"); 
header("Content-type: application/vnd.ms-excel; name='excel'"); 
header("Content-Disposition: attachment; filename=".$_GET['e'].".xls"); 
header("Pragma: no-cache"); 
header("Expires: 0"); 
$e = $_GET['e']; 
// Load the common classes 
require_once('../../../includes/common/KT_common.php'); 

// Load the tNG classes 
require_once('../../../includes/tng/tNG.inc.php'); 

// Make a transaction dispatcher instance 
$tNGs = new tNG_dispatcher("../../../"); 

// Make unified connection variable 
$conn_conn= new KT_connection($conn, $database_conn); 


    switch($e) { 


     case "act": 
      mysql_select_db($database_conn, $conn); 

     $select = "SELECT service, activity, company, user, item, filebox, date FROM act"; 
     $export = mysql_query($select); 
     $count = mysql_num_fields($export); 
     for ($i = 0; $i < $count; $i++) { 
     $header .= mysql_field_name($export, $i)."\t"; 
     } 
     while($row = mysql_fetch_row($export)) { 
     $line = ''; 
     foreach($row as $value) { 
     if ((!isset($value)) OR ($value == "")) { 
     $value = "\t"; 
     } else { 
     $value = str_replace('"', '""', $value); 
     $value = '"' . $value . '"' . "\t"; 
     } 
     $line .= $value; 
     } 
     $data .= trim($line)."\n"; 
     } 
     $data = str_replace("\r", "", $data); 
     if ($data == "") { 
     $data = "\n(0) Records Found!\n"; 
     } 
     print "$header\n$data"; 

     break; 
+1

Vous avez 3 en-têtes de type contenu, chacun différent. Vous dites essentiellement "ce fichier est un muffin, ce fichier est un pot d'eau bouillante, ET ce pot est aussi un morceau de peluche de poche". Sauf si vous faites régulièrement des soupes de poche et de muffins, cela ne peut pas être vrai. –

Répondre

1

Le vrai problème est que vous devez citer le nom de fichier dans votre tête Content-Disposition, mais vous avez seulement besoin d'un en-tête Content-Type, et quelques-unes des autres en-têtes de mise en cache ci-dessous devrait aider des problèmes potentiels avec IE sur ssl (si vous utilisez que)

header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past 
header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified 
header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1 
header ('Pragma: public'); // HTTP/1.0 
header ('Content-Type: application/vnd.ms-excel'); 
header ('Content-Disposition: attachment; filename="'.$_GET['e'].'.xls"'); 
header ('Content-Transfer-Encoding: binary'); 

à titre de note: vous n'êtes pas réellement créer un fichier xls Excel, juste un fichier de valeurs séparées par des tabulations avec une extension .xls

+0

marque de remerciement. aussi, aime le descriptif Marc B :-) –

Questions connexes