Red de conocimiento informático - Conocimiento informático - ¿Cómo generar y descargar un archivo EXCEL con una gran cantidad de datos en tiempo real usando PHP?

¿Cómo generar y descargar un archivo EXCEL con una gran cantidad de datos en tiempo real usando PHP?

La función de descarga es definitivamente indispensable para cualquier sitio web. Las funciones de descarga comunes incluyen imágenes, videos, tablas de Excel, etc. Si el archivo es relativamente pequeño, no encontrará ningún problema, pero cuando la información del archivo sea. demasiado grande Cuando se excede la memoria máxima de PHP, se producirá un problema de desbordamiento de memoria.

Entonces, ¿qué pasa? El principio de este proceso es lo que realmente debemos entender

¿Por qué ocurre un error al descargar un archivo EXCEL grande?

Cuando PHP descarga una tabla grande de Excel, primero debe leer los datos de MySQL del disco duro en la memoria, pero al leerlos, se cargan en nuestra memoria de una vez, si los datos se cargaron. una vez es mucho mayor que la memoria máxima, entonces se ejecutará el negocio de descarga del navegador. Entonces esta vez ocurrirá nuestra situación de desbordamiento de memoria.

Por ejemplo: Por ejemplo, ahora tenemos 100 M de datos, pero nuestra memoria PHP tiene una memoria máxima de solo 64 M, por lo que definitivamente no podrá caber en ella. Podemos comparar esta memoria con. un vaso de agua. La capacidad se compara con la memoria. La capacidad máxima de este vaso de agua es ahora de 64 litros. Si quieres almacenar 100L, definitivamente no podrás caber.

Las cosas grandes se reducen a cosas pequeñas, las cosas pequeñas se reducen a cosas pequeñas. Descargar en secciones

Como puede ver en lo anterior, la descarga del archivo se divide en dos pasos: primero, cargue la memoria y luego ejecute la descarga de salida del navegador, ya que no se pueden cargar archivos grandes. Una vez, entonces podemos adoptar la idea de "reducir cosas grandes a cosas pequeñas y convertir las cosas pequeñas en cosas pequeñas". ¡Podemos lograr descargar y escribir al mismo tiempo, es decir, leer y escribir en lotes! Escribe en lotes nuevamente.

Porque para el usuario, siempre que finalmente obtenga el archivo, es suficiente para el navegador, no hay necesidad de preocuparse por el principio de descarga. Solo necesita solicitar al usuario que descargue el archivo y luego escribir los archivos descargados en lotes en tiempo real en segundo plano.

Pasos para implementar esta idea:

1. Configure el navegador para descargar el título de Excel

2. Abra el flujo de salida php:// y configúrelo. la escritura El identificador del archivo.

Nota: (php://output es un flujo de salida grabable, lo que permite al programa escribir la salida en el flujo de salida como un archivo. PHP enviará el contenido del flujo de salida al servidor web y Devuelto al navegador que inició la solicitud)

3. Obtenga todos los datos en la base de datos, establezca el número de entradas para cada consulta y calcule el número de consultas por lotes a través de estos dos valores

4. Consulte la base de datos cíclicamente de acuerdo con el número de consultas por lotes y luego escriba en el archivo. Al mismo tiempo, la memoria variable para esta operación se borra y el búfer se actualiza en el navegador para que el navegador pueda hacerlo. el archivo siempre alcanza el último tamaño en tiempo real

Nota: use ob_flush, flush() para actualizar

proceso de E/S de PHP

Aquí usamos un IO entrada y salida de PHP, que es nuestro php://inputphp ://output de uso común.

php://input

php://input puede leer datos POST sin procesar. con $form-data ". Nota: p>

php://output es un flujo de datos de solo escritura que le permite escribir en el búfer de salida de la misma manera que imprimir y eco.

Resumen: Las ideas y principios de implementación son muy importantes. Si tiene alguna idea, no dude en consultar en línea

.