1. El código
En el siguiente código se supone que los datos que se exportan provienen de una base de datos MySQL, pero puede ser fácilmente modificado para que funcione con otras fuentes de datos, y por lo tanto sirve como un modelo general:
// Encabezados que determinan la descarga del archivo y el nombre del archivo
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=datos_descargados.csv');
// Un punto para referir la descarga
$output = fopen('php://output', 'w');
// Los encabezados del archivo
fputcsv($output, array('Column 1', 'Column 2', 'Column 3'));
// Los datos
mysql_connect('localhost', 'username', 'password');
mysql_select_db('database');
$rows = mysql_query('SELECT field1,field2,field3 FROM table');
// loop en los registros, descargandolos
while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row);
La cadena 'datos_descargados.csv' en la línea 3 es el nombre que el navegador le sugerirá para el archivo descargado. El literal de matriz en la línea 9 contiene los títulos de las columnas; esta línea se debe omitir por completo si usted no desea incluir encabezados de columna. Las cadenas en líneas de 12 a 14 deben cambiar a los parámetros de conexión correspondientes y cadena de consulta de la base de datos. En una aplicación real de los parámetros de conexión de base de datos deben ser definidos como constantes en un archivo de configuración independiente.
2. ¿Cómo funciona?
El código tiene que decirle al navegador que se está produciendo un archivo CSV y que el archivo debe ser ofrecido para su descarga, en lugar de mostrarlo en el navegador. Línea 2 produce un encabezado HTTP decirle al navegador que el tipo MIME del contenido es text / csv, el tipo oficial MIME para los archivos CSV.
Línea 3 produce un encabezado 'Content-Disposition'. El encabezado Content-Disposition se define en el RFC 2183 y fue diseñado para ser utilizado en los correos electrónicos, pero también fue adoptado por los navegadores web. En navegadores web el valor 'apego' indica al navegador que ofrecerá el archivo para su descarga con el nombre sugerido - el archivo podría de otro modo se mostrará en la ventana del navegador como si fuera texto normal.
PHP 5.1 introdujo la función fputcsv, que da salida a una serie de datos a un puntero de archivo como valores separados por comas. Debido fputcsv sólo puede escribir en el archivo punteros, la línea 6 se abre la secuencia de salida como si fuera un archivo. Línea 9 entonces emite títulos de las columnas, mientras que la línea 17 bucles más de las filas de datos y les da salida.