IE中的Excel导出问题

时间:2011-05-19 20:32:40

标签: php mysql excel ssl export-to-excel

我有这个脚本将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下运行?

2 个答案:

答案 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访问吗?

Excel标题

现在您需要提供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中,我也取得了成功。