导出到CSV将html添加到文件

时间:2019-05-08 作者:Darth Mikey D

我正在尝试使用以下代码将结果导出到csv文件。导出似乎可以工作,但当我打开文件时,它包含页面中的html代码。非常感谢您的帮助。

ob_start();
global $wpdb;
$domain = $_SERVER[\'SERVER_NAME\'];
$table = $wpdb->prefix . "qi_project_requests";
$filename = "export.csv";
$sql = $wpdb->get_results("select * from $table");

$header_row = array(
    \'Date Submitted\',
    \'Requestor Name\'
);

$data_rows = array();

foreach ($sql as $data) {
    $row = array(
        $data->date,
        $data->rname
    );
    $data_rows[] = $row;
}

$fh = @fopen( \'php://output\', \'w\' ); 
fprintf( $fh, chr(0xEF) . chr(0xBB) . chr(0xBF) ); 
header( \'Cache-Control: must-revalidate, post-check=0, pre-check=0\' ); 
header( \'Content-Description: File Transfer\' ); 
header( \'Content-type: text/csv\' ); 
header( "Content-Disposition: attachment; filename=$filename" ); 
header( \'Expires: 0\' ); 
header( \'Pragma: public\' ); 
fputcsv( $fh, $header_row ); 
foreach ( $data_rows as $data_row ) { 
    fputcsv( $fh, $data_row ); 
} 
fclose( $fh ); 

ob_end_flush(); 

die(); 

1 个回复
SO网友:Rick Hellewell

我有一个类似的过程,将数据库中的所有电子邮件地址输出到可下载的txt文件中。看起来是这样的:

$xoutput =  show_subscriber_list();
$xfile = fopen(\'xsubscriber.txt\' , "w") or die("Unable to open file!");;
fwrite($xfile,$xoutput);
fclose($xfile);

$filename = \'xsubscriber.txt\'; // of course find the exact filename....        
header(\'Pragma: public\');
header(\'Expires: 0\');
header(\'Cache-Control: must-revalidate, post-check=0, pre-check=0\');
header(\'Cache-Control: private\', false); // required for certain browsers 
header(\'Content-Type: application/pdf\');

header(\'Content-Disposition: attachment; filename="\'. basename($filename) . \'";\');
header(\'Content-Transfer-Encoding: binary\');
header(\'Content-Length: \' . filesize($filename));

readfile($filename);

exit;
Theshow_subscriber_list 函数对数据执行SQL查询,通过查询返回的行获取循环中的所有数据。该函数以字符串形式返回该数据,该字符串用作$filename (如中所示return $text_data; ).

这个$filename 存储在当前文件夹中。那么$filename 在$头文件中使用,它将文件作为下载/打开对话框提供给您。

重要的部分是在你做标题之前“构建”文件的内容。您可以同样轻松地将数据“构建”为字符串,然后执行标题内容。

Added

下面是一个函数,它以文本形式返回数据库内容。使用调用

    $data = mysqli_query($conn, $sql);
    $output = display_data($data); // text output used in the above function

    function display_data($data) {
        $output = "";
        foreach($data as $row) {
            $output .= $row["email"] . PHP_EOL ;
        }


    return $output;
}
请注意,正如OP的评论中所提到的,您需要设置文件内容所需的适当内容类型;我已将其设置为PDF格式。