我之前已经问过这个问题,但我遇到了一个问题。

奇怪的是,当我执行这个函数时,它包含了你选择执行函数的链接的页面的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

有帮助吗?

解决方案

我的猜测是,你有一些模板可以生成相同的HTML页眉和页脚,无论所请求的页面如何。在调用exportCSV函数之前的某个时候,会生成标题。

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

其他提示

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top