题
我之前已经问过这个问题,但我遇到了一个问题。
奇怪的是,当我执行这个函数时,它包含了你选择执行函数的链接的页面的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变量初始化为空字符串。该方法中的所有操作都是连接,因此您可能会带来一些旧数据。
请考虑您向全世界展示可能敏感的数据。你已经有十几个人发布了他们的电子邮件和街道地址。
不隶属于 StackOverflow