Snippet: generar fácilmente un archivo CSV con PHP

Generar un archivo CSV es una de esas tareas que probablemente a todos nos ha tocado hacer, y aun más probable es que nos terminemos ahogando en un vaso de agua cuando en realidad es algo bastante simple.

No es necesario preocuparnos por tener que escapar caracteres ni escribir demasiado código, ya que a partir de PHP 5.1.0 contamos con la función fputcsv() que se ocupa de prácticamente todo. Un ejemplo sencillo para generar un archivo descargable a partir de una consulta cualquiera a una base de datos:

La función recibe dos parámetros: un archivo (abierto con fopen()) y un array de valores. En el ejemplo, se muestra una forma de generar un archivo CSV descargable a partir de una consulta a la base de datos (utilizando la clase wpdb de WordPress, aunque obviamente podría aplicar para cualquier otro caso).

Por supuesto, también existe la función complementaria para leer un archivo CSV, fgetcsv().

13 thoughts on “Snippet: generar fácilmente un archivo CSV con PHP

  1. Muy bueno, pero en el caso de que quisiera extraer los valores de una tabla SQL, como haria la consulta? Gracias

  2. Muy bueno, pero en el caso de que quisiera extraer los valores de una tabla SQL, como haria la consulta? Gracias

  3. Muy bueno, pero en el caso de que quisiera extraer los valores de una tabla SQL, como haria la consulta? Gracias

  4. Muy bueno, pero en el caso de que quisiera extraer los valores de una tabla SQL, como haria la consulta? Gracias

  5. Muy bueno, pero en el caso de que quisiera extraer los valores de una tabla SQL, como haria la consulta? Gracias

  6. Hola,primero felicitarte y segundo quiero pedirte que me apoyes.
    Mi objetivo es exportar un archivo csv con mas de 1 millon de registros
    cuando lo hago con el ejemplo que diste mi servidor se muere para ello pense exportra de esta forma.
    por partes osea un ejemplo abrir un archivo temporal y escribir 1000 registros luego cerrar y luego abrir asi consecutivamente hasta llenar con los 1 millon de registros y recien que me bote el descargable

    1. Hay dos cosas de las que te tienes que preocupar cuando la cantidad de registros: por una parte, el tiempo de ejecución; y por otra, el consumo de memoria. En términos generales, hacer el procesamiento por lotes te ayuda en ambos sentidos.

      Si es una tarea que se realiza desde una interfaz de usuario, una buena opción es hacerlo con peticiones AJAX; como ejemplo puedes ver el funcionamiento del plugin Regenerate Thumbnails para WordPress: https://wordpress.org/plugins/regenerate-thumbnails/screenshots/

      Aquí lo básico es que al comenzar el proceso, se envía una petición que activa el procesamiento en el servidor del primer lote y el servidor responde con un status que sirve para enviar una nueva petición que retome el procesamiento y así sucesivamente hasta terminar.

      Si la tarea no tiene interfaz de usuario, es mucho más fácil hacerla con PHP por línea de comandos ya que el tiempo de ejecución máximo no está limitado, aunque de todos modos deberías vigilar el consumo de memoria.

Comments are closed.

%d bloggers like this: