¿Cómo utilizar PHP para generar un archivo EXCEL con una gran cantidad de datos en tiempo real?
Entonces, ¿qué pasó con ellos? El principio de este proceso es lo que realmente debemos entender.
¿Por qué aparece un error al descargar una gran cantidad de archivos EXCEL?
Cuando PHP descarga una tabla grande de Excel, primero necesita leer los datos MySQL del disco duro a la memoria, pero la lectura se carga en nuestra memoria al mismo tiempo. Si la cantidad de datos cargados a la vez es mucho mayor que la memoria máxima, se realizará la descarga comercial del navegador. Entonces nuestra memoria se desbordará esta vez.
Por ejemplo, ahora tenemos 100 M de datos, pero nuestra memoria PHP es solo de 64 M como máximo, por lo que no se puede cargar. Podemos comparar este recuerdo con un vaso de agua. La capacidad de esta taza de agua es mayor que la memoria. La capacidad máxima actual de la taza es 64L. Se requiere un depósito de 100L. No puedo dejarlo pasar.
Sujeto a ello, acéptelo y divídalo en segmentos
Como se puede ver en lo anterior, la descarga de archivos se divide en dos pasos. Primero, se carga en la memoria y luego el navegador lo descarga. Dado que los archivos grandes no se pueden cargar a la vez, puede utilizar la idea de "reducir las cosas grandes a pequeñas y hacer las pequeñas pequeñas" y descargarlas mientras escribe, es decir, leer y escribir por lotes.
Porque, como usuario, siempre que finalmente obtenga el archivo, no necesita preocuparse por el principio de descarga del navegador. Solo necesita darle al usuario un mensaje de descarga de archivos y luego el backend escribe los archivos que se descargarán en lotes en tiempo real.
Pasos para implementar la idea:
1. Establezca el encabezado requerido para que el navegador descargue Excel.
2. Abra la secuencia de salida php:// y configure el identificador de escritura del archivo.
Nota: (php://output, un flujo de salida grabable 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 devolverá al navegador solicitante).
3. Obtenga todos los datos de la base de datos, establezca el número de consultas para cada vez y calcule el número de consultas por lotes a través de estos dos valores.
4. Consulte la base de datos cíclicamente según el número de consultas por lotes y luego escriba en el archivo. Al mismo tiempo, la memoria de esta variable de operación se borra y se actualiza en el búfer del navegador, de modo que el archivo del navegador siempre mantenga el tamaño más reciente en tiempo real.
Nota: Utilice ob_flush y flush() para actualizar el flujo de E/S de PHP.
Aquí usamos una entrada y salida IO de PHP, que es lo que usamos a menudo.
php://inputphp://output .php://input
Php://input puede leer los datos de la publicación original. Comparado con $form-data ".
Nota: p gtPhp://output es un flujo de datos de solo escritura, que le permite escribir en el búfer de salida como print y echo.
Para resumir: implementar ideas y principios es muy importante. Si tiene algún sentimiento, no dude en consultar en línea.