Download Data as CSV

Send some data to the client as a CSV file attachment using simple, built-in functions within PHP.

Clearing all current output buffers before writing is useful when responding within a WordPress context such as a wp-admin page or WP REST API endpoint. It ensures only the CSV values are written to the resulting file attachment, which a client’s web browser will automatically prompt for downloading to the client’s machine.

// Default file name for download.
$csv_file_name = date( 'Y-m-d' ) . '_values.csv';

// Define rows of data.
$csv_file_content = array(
	array( 'a', 'b', 'c' ),
	array( 1, 2, 3 ),
	array( 'Los Angelos', 'New York', 'Chicago' ),
);

// Tell client to download the contents as a file.
header( 'Content-Type: text/csv' );
header( 'Content-Disposition: attachment; filename="' . $csv_file_name . '"' );

// Clear all current output buffers.
while ( 0 !== ob_get_level() ) {
	ob_end_clean();
}

// Write the content as CSV.
$f = fopen( 'php://output', 'w' );
foreach ( $csv_file_content as &$line ) {
	fputcsv( $f, $line );
}

// All done!
exit;