Desarrollo web

Procesar archivos grandes usando PHP

Si deseas procesar archivos de gran tamaño utilizando PHP, puedes usar algunas de las funciones ordinarias de PHP, como file_get_contents() o file(), que tienen una limitación cuando se trabaja con archivos muy grandes.

Limitación de memoria

Estas funciones se basan en la configuración de memory_limit en el archivo php.ini; puedes aumentar el valor, pero estas funciones aún no son adecuadas para archivos muy grandes porque, en algún momento, estas funciones pondrán todo el contenido del archivo en la memoria.


Cualquier archivo que tenga un tamaño mayor que la configuración memory_limit no se cargará en la memoria. Entonces, ¿qué sucede si tienes un archivo de 20GB y deseas procesarlo mediante PHP?



Mala experiencia de usuario

Otra limitación es la velocidad de salida en producción. Supongamos que acumularás la salida en una matriz y luego la emitirás de una vez, entregando una mala experiencia al usuario.

Para esta limitación, podemos usar la palabra clave yield para generar un resultado inmediato.


Clase SplFileObject

En esta publicación, usaremos la clase SplFileObject, que es parte de la biblioteca estándar de PHP.

Para nuestra demostración, crearemos una clase para procesar archivos grandes usando PHP.

La clase tomará el nombre del archivo como entrada para el constructor:

Ahora definiremos un método para iterar a través del archivo. Este método usará la función fgets() para leer una línea a la vez.

Puedes crear otro método que use la función fread().

Leyendo archivos de texto

El fgets() es adecuado para analizar archivos de texto que incluyen saltos de línea, mientras que fread() es adecuado para analizar archivos binarios.

Esta función se usará para iterar a través de líneas de archivos de texto.


Leer archivos binarios

Otra función se usará para analizar archivos binarios:


Leer en una dirección

Ahora definiremos un método que tomará el tipo de iteración y devolverá la instancia de NoRewindIterator.

Usamos NoRewindIterator para forzar la lectura en una dirección.

Ahora, toda la clase se verá así:

Analizar archivos grandes

Probemos nuestra clase:

Esta clase debe leer cualquier archivo grande sin limitaciones ¡Genial!

Puedes usar esta clase en tus proyectos de Laravel cargando automáticamente tu clase y agregarlo al archivo composer.json.

Ahora puedes analizar y procesar archivos de gran tamaño utilizando PHP fácilmente.

Sigue regresando.

Gracias.

 

Mokhtar Ebrahim
Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *