【问题标题】:fputcsv exporting HTML when there isn't data to exportfputcsv 在没有要导出的数据时导出 HTML
【发布时间】:2013-04-17 00:31:33
【问题描述】:

我有将数据导出到 CSV 的 SQL 查询。 一切正常,直到我在导出中低于一定数量的数据。

当我低于此阈值时,将导出记录,然后是页面的 html。

如果我在 header.html 上添加更多字符,问题就解决了。我已经对此进行了测试和重新测试,html页面上任何地方的一个文本字符是导出整个html或仅导出记录之间的区别。

这听起来太奇怪了,我希望有人经历过类似的事情,并且可以告诉我在哪里查看或我应该在此处粘贴代码的哪个特定部分:

这是 fputcsv 部分:

if(isset($_SESSION['query_file']))
{
$query = $_SESSION['query_file'];
unset($_SESSION['query_file']);

$stmt = $dbh->query($query);

$results = $stmt->fetchAll();

$link = 'csv/'. Utils::rand_code(10).'.csv' ;

$fp = fopen(SITE_ROOT.$link,'w');
$first_row = array(
    'Name',
    'ID',
    'Email',
    'Response',
    'Phone'
);

fputcsv($fp, $first_row);

foreach($results as $key=>$value)
{


    $array_add = array(
        $value['user_last_name'].''.$value['user_first_name'],
        $value['user_id'],$value['user_email'],$value['user_response'],
        $value['user_phone']
    );

    fputcsv($fp, $array_add);

};

fclose($fp);

header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Length: ". filesize(SITE_ROOT.$link).";");
header("Content-Disposition: attachment; filename=".$link);
header("Content-Type: application/octet-stream; "); 
header("Content-Transfer-Encoding: binary");

readfile(SITE_ROOT.$link);

unlink(SITE_ROOT.$link);
}   

提前致谢。

【问题讨论】:

  • 听起来像是输出缓冲问题。您不应该在一个请求中混合输出格式。

标签: php html csv fputcsv


【解决方案1】:

在调用unlink(SITE_ROOT.$link); 之后添加die(); 应该可以防止页面的其余部分执行,从而使您的CSV 被HTML 弄乱。

【讨论】:

  • 谢谢,这是一个优雅的解决方案,但你知道为什么 html 的数量会影响输出吗?
  • 不,如果没有看到更多代码,我不确定。是否有可能 HTML 总是被附加到 CSV,但您的 CSV 阅读器仅在它包含特定字符时才显示它,比如逗号?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多