"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo evitar el agotamiento de la memoria al procesar archivos grandes en PHP usando File_get_contents?

¿Cómo evitar el agotamiento de la memoria al procesar archivos grandes en PHP usando File_get_contents?

Publicado el 2024-11-23
Navegar:549

How to Avoid Memory Exhaustion When Processing Large Files in PHP Using File_get_contents?

El procesamiento de archivos mediante File_get_contents experimenta agotamiento de la memoria

Cuando se trabaja con archivos grandes en PHP, se utiliza la función file_get_contents para recuperar todo el contenido del archivo una variable puede provocar errores de agotamiento de la memoria. Esto se debe a que la variable que contiene el contenido del archivo reside en la memoria y, para archivos grandes, se puede exceder el límite de memoria asignado.

Para superar este problema, un enfoque más eficiente es utilizar punteros de archivo y procesar el archivo. en trozos. De esta manera, solo la parte actual del archivo se mantiene en la memoria en un momento dado.

Aquí hay una función personalizada que implementa este procesamiento de archivos fragmentados:

function file_get_contents_chunked($file, $chunk_size, $callback)
{
    try {
        $handle = fopen($file, "r");
        $i = 0;
        while (!feof($handle)) {
            call_user_func_array($callback, [fread($handle, $chunk_size), &$handle, $i]);
            $i  ;
        }

        fclose($handle);

        return true;
    } catch (Exception $e) {
        trigger_error("file_get_contents_chunked::" . $e->getMessage(), E_USER_NOTICE);
        return false;
    }
}

Para usar esta función, defina una función de devolución de llamada para manejar cada fragmento de datos:

$success = file_get_contents_chunked("my/large/file", 4096, function($chunk, &$handle, $iteration) {
    // Perform file processing here
});

Además, considere refactorizar sus operaciones de expresiones regulares para usar funciones de cadena nativas como strpos, substr, trim y explode. Esto puede mejorar significativamente el rendimiento cuando se trabaja con archivos grandes.

Declaración de liberación Este artículo se reimprime en: 1729143376 Si hay alguna infracción, comuníquese con [email protected] para eliminarla.
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3