How to Generate and Download CSV Files from PHP Scripts: A Comprehensive Guide
Introduction
Creating and downloading CSV (Comma-Separated Values) files is often necessary for data exchange and analysis. In PHP, this task can be accomplished through several methods. This guide will provide a thorough walkthrough on how to achieve this, even for novice programmers.
Creating the CSV String
To create a CSV string from an array, each element must be converted into a comma-separated value. This can be achieved using the fputcsv() function:
$output = fopen("php://temp", "w"); foreach ($array as $line) { fputcsv($output, $line); } fseek($output, 0);
Sending HTTP Headers
To prompt the browser to save the CSV file instead of displaying it, we need to send specific HTTP headers:
header('Content-Disposition: attachment; filename="filename.csv"'); header('Content-Type: text/csv');
Generating and Downloading the CSV File
Combining the above steps, we can create a function to generate and download CSV files:
function downloadCsv(array $array, string $filename): void { // Create the CSV string $output = fopen("php://temp", "w"); foreach ($array as $line) { fputcsv($output, $line); } fseek($output, 0); // Send HTTP headers header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Content-Type: text/csv'); // Send the CSV file fpassthru($output); }
You can use this function to download CSV files with the following code:
$array = [ ['id', 'name', 'email'], ['1', 'John', 'john@example.com'], ['2', 'Jane', 'jane@example.com'] ]; downloadCsv($array, 'contacts.csv');
Alternative Method
Instead of using php://temp, you can directly write to the output buffer:
function downloadCsv2(array $array, string $filename): void { header('Content-Disposition: attachment; filename="' . $filename . '"'); header('Content-Type: text/csv'); $f = fopen('php://output', 'w'); foreach ($array as $line) { fputcsv($f, $line); } }
The above is the detailed content of How to Download a CSV File from a PHP Script?. For more information, please follow other related articles on the PHP Chinese website!