Tratamento de arquivos grandes usando PHP sem esgotamento de memória
Ler e processar arquivos grandes em PHP pode ser desafiador devido às limitações de memória. A função file_get_contents() pode acionar um erro "Memória esgotada" ao lidar com arquivos grandes que consomem mais memória do que o permitido.
Compreendendo a alocação de memória
Ao usar file_get_contents( ), todo o arquivo é lido e armazenado como uma string na memória. Para arquivos grandes, isso pode exceder a memória alocada e levar ao erro.
Abordagem alternativa: leitura de arquivos em pedaços
Para evitar esse problema, considere usar métodos alternativos, como como fopen() e fread() para ler o arquivo em pedaços. Isso permite processar seções menores do arquivo por vez, gerenciando o uso de memória de maneira eficaz. Aqui está uma função que implementa esta abordagem:
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;
}
}
Exemplo de uso
Para usar esta função, defina um retorno de chamada que lide com o pedaço e forneça os parâmetros necessários:
$success = file_get_contents_chunked("my/large/file", 4096, function ($chunk, &$handle, $iteration) {
/* Do something with the chunk */
});
Considerações adicionais
Outra otimização é evitar o uso de expressões regulares complexas, que podem consumir memória significativa quando aplicadas a entradas grandes. Considere usar funções de string nativas como strpos, substr e explode.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3