利用speedPHP导出excel失败,将导出的内容输出在页面上

#1 stjdydayou

导出的代码如下

//导出消费3次以上的用户
public function explortCost3()
{
$fileName=iconv('UTF-8','gb2312','商城消费3次以上的用户');
header("Content-type: application/vnd.ms-excel; charset=utf-8");
header("Content-Disposition: attachment; filename=$fileName.xls");
$tab0903 = spClass('t_bsts_0909250903');
$sql="select a.`f_bsts_0909250903_000`,
a.`f_bsts_0909250903_019` as userName,
a.`f_bsts_0909250903_020` as areaName,
a.`f_bsts_0909250903_021` as address,
a.`f_bsts_0909250903_023` as userMP,
sum(a.`f_bsts_0909250903_009`) as totalMoney,
count(a.`f_bsts_0909250903_000`) as costNum
from `t_bsts_0909250903` as a
left join (
select `f_bsts_0909250903_019` as userName1,
count(`f_bsts_0909250903_000`) as costNum1
from `t_bsts_0909250903` where
(`f_bsts_0909250903_015`=3 or `f_bsts_0909250903_015`=4) and `f_bsts_0909250903_019`<>''
group by `f_bsts_0909250903_019`
) as b on a.`f_bsts_0909250903_019`=b.`userName1`
where (a.`f_bsts_0909250903_015`=3 or a.`f_bsts_0909250903_015`=4)
and a.`f_bsts_0909250903_019`<>'' and b.costNum1>2 group by a.`f_bsts_0909250903_019` order by costNum desc,totalMoney desc
";
$r1=$tab0903->findSql($sql);
$str.= "排序\t";
$str.= "姓名\t";
$str.= "地址\t";
$str.= "联系电话\t";
$str.= "消费总额\t";
$str.= "消费次数\t";
$str.= "\n";
foreach ($r1 as $_k=>$_v)
{
$str.= (++$sortN)."\t";
$str.= $_v['userName']."\t";
$str.= $_v['areaName'].','.$_v['address']."\t";
$str.= $_v['userMP']."\t";
$str.= '¥'.$_v['totalMoney']."\t";
$str.= $_v['costNum']."\t";
$str.= "\n";
}
//转换为GBK编码
$str = iconv("UTF-8","GBK",$str);
//输出
print($str);
}


运动的结果是不生成excel文件,而是把$str的内容全部输出到页面上,哪位大侠帮助一下,小弟感激不尽

2011-02-12 11:50:10

#2 jake

header前面再加上
header("Content-Type: application/force-download");

2011-02-12 11:57:56

#3 soseek

测试看看

2011-02-12 12:03:40

#4 stjdydayou

回复 2 jake


    还是没有用哦,我个人理解原因可能是speedphp框架里自带了一些header输出,从而导致导出的excel的header失效,有没有什么办法消去方法执行所有header信息呢?

2011-02-12 12:17:48

#5 jake

回复  jake


    还是没有用哦,我个人理解原因可能是speedphp框架里自带了一些header输出,从而导致导出 ...
stjdydayou 发表于 2011-2-12 12:17
框架没有输出header。

你可以在header前面加上ob_clean

2011-02-12 13:49:24

#6 stjdydayou

回复 5 jake

已经解决了,在首页index.php里加一个ob_start();
在运行的方法中加一个ob_clean();
总结原因还是在header前面就输出的内容~~
呵呵
谢谢

2011-02-12 14:44:37

#7 jake

回复  jake

已经解决了,在首页index.php里加一个ob_start();
在运行的方法中加一个ob_clean();
总结原因 ...
stjdydayou 发表于 2011-2-12 14:44
简单说一下,speedphp框架文件没有header输出,也没有bom等空字符,可以搜索代码看看。
楼上可以检查一下各个文件是否有bom等空字符。

2011-02-12 14:53:45

#8 7666345

刚好要用到,标记下,嘿嘿

2011-02-25 18:13:33

#9 xpp1000

代码不工整

2014-09-26 10:24:50