我有这个脚本将mysql数据导出到excel。我试过了 一切,但我无法让这个脚本为IE工作。该 脚本使用FireFox或Chrome下载数据,但IE失败了 表示:
Internet Explorer无法从www.mysite.com下载list_view.php。 (这是文件所在的站点)。
Internet Explorer无法 打开这个网站。请求的网站不可用或 无法找到。请稍后再试。
这是我正在使用的代码:
$sql = "SELECT...."
$result = mysql_query($sql)
or die("\nError Retrieving Records.<hr />sql: $sql<hr />ERROR:".mysql_error());
if(mysql_num_rows($result) > 0){
// build a filename that excel will use to save it as
$filename=$name."_".dateFromDB($_GET['confDate']).".xls";
// headers to force the open/save into Excel
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=$filename");
header("Pragma: no-cache");
header("Expires: 0");}?>
<table>
<thead>
<tr>
<th>address</th>
<th>phone</th>
<th>email</th>
<th>status</th>
</tr>
</thead>
<tbody>
<?php // loop over items
while ($row = mysql_fetch_array ($result, MYSQL_ASSOC)) { ?>
<tr>
<td><?=$row['address'];?></td>
<td><?=$row['phone'];?></td>
<td><?=$row['email'];?></td>
<td><?=$row['status'];?></td>
</tr><?php
}?>
</tbody>
</table><?php
exit(); // exit or it will throw an error when it tries to continue
我知道可能有些人建议不使用IE,但实际使用导出功能的人无法访问不同的浏览器。
编辑:
我忘了提到我正在运行SSL(https)。如果我关闭SSL,一切都在IE上工作正常,但SSL上的SSL显示错误。
如何使其在SSL下运行?
答案 0 :(得分:1)
IE的标题可能很棘手。这是事情,你应该设置它不要像这样缓存:
ini_set('zlib.output_compression','Off');
header('Pragma: public');
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
//header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate'); // HTTP/1.1
header('Cache-Control: pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
header ("Pragma: no-cache");
header("Expires: 0");
现在可能存在一个问题,如果您的服务器时间未设置为正确的时区,这实际上可能会产生相反的效果并强制IE缓存它。确保为您所在的正确时区设置时区。它是共享服务器吗?你有ssh访问吗?
现在您需要提供IE的标头集
header('Content-Transfer-Encoding: none');
header('Content-Type: application/vnd.ms-excel;'); // This should work for IE & Opera
header("Content-type: application/x-msexcel"); // This should work for the rest
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
尝试一下,希望它能够奏效。
答案 1 :(得分:0)
您可以将其输出为CSV,手动格式化,还是implode('","', $row)
之类的内容,而不是将所有内容输出为表格?保留内容类型标头的方式。即使在IE中,我也取得了成功。