1 votes

CSV Export script ne génère qu'une erreur dans IE ?

J'ai un script script d'exportation CSV (enrdata_arch.php) qui appelle les informations d'une base de données existante et les exporte au format CSV. Cependant, pour une raison quelconque, le script renvoie l'erreur suivante UNIQUEMENT dans Internet Explorer :

Microsoft Office Excel ne peut pas accéder au fichier 'https://www.domain.com/admin/enrdata\_arch.php'. Il y a plusieurs raisons possibles :

  • le nom de fichier ou le chemin d'accès n'existe pas
  • le fichier est utilisé par un autre programme
  • le classeur que vous essayez d'enregistrer porte le même nom que le classeur actuellement ouvert

**

Le script original est affiché ci-dessous :

**

<?php

$host = 'localhost';
$user = 'username';
$pass = 'password';
$db = 'db_name';
$table = 'table_name';
$archive = 'archive_name';
$file = 'export';

$link = mysql_connect($host, $user, $pass) or die("Can not connect.".mysql_error());
mysql_select_db($db) or die("Can not connect.");

$result = mysql_query("SHOW COLUMNS FROM ".$table."");
$i = 0;
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$csv_output .= $row['Field'].", ";
$i++;
}
}
$csv_output .= "\n";

$values = mysql_query("SELECT * FROM ".$table."");
while ($rowr = mysql_fetch_row($values)) {
for ($j=0;$j<$i;$j++) {
$csv_output .= '"'.$rowr[$j].'",'; 
}
$csv_output .= "\n";
}

$filename = $file."_".date("Y-m-d",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
print $csv_output;

//transfers old data to archive
$transfer = mysql_query('INSERT INTO '.$archive.' SELECT * FROM '.$table) or die(mysql_error());

//empties existing table
$query = mysql_query('TRUNCATE TABLE '.$table) or die(mysql_error());

mysql_close($link);
exit;
?>

Il semble que le script essaie d'enregistrer et d'ouvrir un fichier PHP uniquement lorsque l'on utilise IE. Des idées ?

1voto

Mark Baker Points 90240

Les en-têtes pour SSL sont un problème connu avec IE

J'utilise

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

et c'est le 'Pragma : public qui est la clé pour IE/ssl

Le type de contenu d'un fichier CSV est

text/csv

ou

text/plain

plutôt que

application/vnd.ms-excel

qui est spécifiquement MS Excel .xls speardsheets

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X