1

我知道以前有人问过这个问题,但我遇到了一个问题。

奇怪的是,当我执行这个函数时,它包含了您选择执行该函数的链接的页面的 html。

function exportCSV($table) {
    $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_H-i",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;
    exit;
}

有谁知道为什么它会在 csv 文件中包含 HTML? 替代文字 http://i35.tinypic.com/16i9oxi.jpg

4

5 回答 5

3

我的猜测是,无论请求的页面如何,您都有某种模板可以生成相同的 HTML 页眉和页脚。在调用 exportCSV 函数之前的某个时间,会生成标头。

您没有显示输出的底部,但我敢打赌页脚也在那里,因为我怀疑在函数退出后流控制将继续处理该代码。

于 2008-10-16T00:49:49.283 回答
1

php 不是我真正的东西,但似乎你需要在写出你的内容之前清除响应流。在达到此功能之前,也许还有其他东西正在将 html 写入流?像模板或母版页或类似的东西?

HTML 内容看起来像一个典型的标题/导航栏。如果有其他内容会自动包含您需要为此路线禁用的内容?

于 2008-10-16T00:38:03.847 回答
0

您在某处遇到了控制流问题 - 似乎 html 头部和导航默认包含在任何页面中,包括生成 CSV 的页面中。一种解决方案是检查 CSV 请求,如果是这种情况,请不要包含 html 代码,另一种解决方案是使用输出缓冲,然后在输出 CSV 数据之前丢弃所有先前的输出。

于 2008-10-16T00:40:35.497 回答
0

我建议在方法开始时将 csv_output 变量初始化为空字符串。您在方法中的所有操作都是串联的,因此您可能会带来一些旧数据。

于 2008-10-16T00:43:25.210 回答
0

请考虑到您正在向全世界展示潜在的敏感数据。你有十几个人现在已经公布了他们的电子邮件和街道地址。

于 2008-10-16T01:01:49.197 回答