0

我有将数据导出到 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);
}   

提前致谢。

4

1 回答 1

0

die();在调用之后添加一个unlink(SITE_ROOT.$link);应该可以防止页面的其余部分执行,从而用 HTML 破坏你的 CSV。

于 2013-04-17T02:45:39.857 回答