wordpress csv输出包括html在输出中

mklgxw1f  于 2023-02-20  发布在  WordPress
关注(0)|答案(2)|浏览(173)

我正在尝试从WordPress中动态创建一个可下载的csv文件。要包含的数据是正确的,并且文件已成功创建用于下载。但是,创建的csv文件包含模板HTML输出。
如果没有模板中的HTML,如何输出数据?
下面是函数。数组正确地填充了一个SQL查询,但结果与此相同。

function exportAsCSV (  ) {
  $csv = '';
  $header_array = array('Header 1', 'Header 2', 'Header 3');
  $data_array = array(
    array('Row 1 A', 'Row 1 B', 'Row 1 C'),
    array('Row 2 A', 'Row 2 B', 'Row 2 C'), 
  ); 

  $csv .= implode(', ', $header_array);
  $csv .= '\n';

  foreach($data_array as $row){
    $csv .= implode(', ', $row);
    $csv .= '\n';  
  } 

    $now = gmdate('D, d M Y H:i:s') . ' GMT';

    header('Content-Type: text/csv');
    header('Expires: ' . $now);

    header('Content-Disposition: attachment; filename="data.csv"');
    header('Pragma: no-cache'); 

    echo $csv; 
    exit();
}

函数的调用如下:

if(isset($_GET['export_data'])){
  ob_end_clean();   
  exportAsCSV();
}
hiz5n14c

hiz5n14c1#

为了更安全,你可以在发送任何数据之前清空输出缓冲区,然后开始发送数据到输出缓冲区,并在关闭数据流之前刷新它。

function get_csv($columns_headers, $data) {
        
        $filename = "php://output";

        ob_clean(); //empty the output buffer 
        ob_start();  //and start a new one
        
        header('Pragma: public');
        header('Expires: 0' );
        header('Cache-Control: no-cache, must-revalidate');
        header('Content-Type: text/csv');
        header('Content-Disposition: attachment; filename="'.'data.csv"');

        $outstream = fopen($filename, 'r+')  or die("Error opening php://output");
        
        fputcsv( $outstream , $columns_headers );

        foreach($data as $item)
            fputcsv($outstream,$item);
        
        ob_flush();  //send the whole buffer
        fclose($outstream) or die("Error closing php://output");    
        //all done
        die();

    }
lkaoscv7

lkaoscv72#

我想明白了。更多级别的输出缓冲。现在,我调用ob_get_level()来确定ob_end_clean()的次数。输出中不再有额外的HTML。

相关问题