将HTML代码插入到CSV文件中的fputcsv指令

3
我使用fputcsv写入csv文件时遇到问题。它还将页面HTML内容一并写入了csv文件中。我的代码有什么问题吗?
//Excel header
header("Content-Disposition: attachment; filename=\"Delivery_Reports.csv\";" );
header("Content-type: application/vnd.ms-excel");
$out = fopen("php://output", 'w');
$flag = false;
// $result = mysql_query("SELECT * FROM senderids ") or die('Query failed!');
//$sel="SELECT number as MobileNumber ,snum as Sender , msg as Subject ,crdate as Date ,status FROM savemsg WHERE userID='".$_SESSION['id']."' ".$str." ORDER BY sn DESC ";
$result = mysql_query("SELECT `count`, `dnd`, `credit`, `sender_id`, `to`, `message`, `status` FROM `reports` WHERE `unq_id` = '$dlr_id'");
while(false !== ($row = mysql_fetch_assoc($result))){
    if(!$flag){
        $list = array(
            "Total"=>"Total",
            "DND"=>"DND",
            "Credits"=>"Credits",
            "From"=>"From",
            "To"=>"To",
            "Message"=>"Message",
            "Status"=>"Status"
        );
        // display field/column names as first row
        fputcsv($out, array_keys($list), ',', '"');
        $flag = true;
    }
    // array_walk($row, 'cleanData');
    fputcsv($out, array_values($row), ',', '"');
}
fclose($out);

2
页面 HTML 是什么?我看不到任何东西。也许您可以提供更多上下文信息来解释您的问题? - andrewsi
那么,你看到的这个HTML是什么? - gen_Eric
1
这可能不是您的php页面的全部内容吧?还有什么其他的?在创建CSV内容之前,任何在此代码之前的HTML都将已经存在于页面输出缓冲区中...虽然您正在使用php://output,但在这种情况下它与使用print几乎相同... - Tim Williams
4个回答

7
在代码片段中,你无法保证不会输出其他内容。如果此片段之前的代码使用了输出缓冲,则可以使用 ob_end_clean 丢弃 HTML。如果此片段之后的代码导致问题,你可以简单地调用 die 来阻止其运行。然而,如果此片段之前的代码直接将 HTML 输出到浏览器,或者此片段之后的代码必须输出 HTML 并确实需要运行,则必须修改那些代码才能解决问题。
正如 Tim 所提到的,printecho 和输出到 伪文件 php://output 的作用完全相同。

0

fclose($out); 之后,您还可以使用 exit; 命令,这将停止输出并防止继续抓取我的 HTML。


这与使用 die 完全相同。 - Brilliand
@Brilliand 是的,它们是相同的,只有一些小差异。die会关闭连接,而exit不会;拼写、起源和退出值也有所不同。但是这里没有其他答案提到exit。因此,如果有新人来了,他们可以看到,“啊!还有一个退出选项”。为论坛观众提供选择。 - Hmerman6006

0

你也可以在关闭文件之前使用关键字continuefclose($f);)。这也非常有效。


0

我知道这是一个老问题,但它在谷歌上被找到了,所以我来补充一下。

如果HTML是由CMS(如WordPress等)输出的,在尝试创建文件之前,添加ob_clean();ob_start();可能会有所帮助。

例如:

function create_csv($records, $columns){
    ob_clean();
    ob_start();
    header('Content-Type: application/csv');
    header('Content-Disposition: attachment; filename="Export.csv"');
    $fp = fopen('php://output', 'w+');
    // Generate the file content.
    fclose($fp);
    die();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接