Corrigindo o erro "Fatal error: Allowed memory size exhausted" no PHP

Esse erro ocorre quando o PHP atinge o limite de memória configurado. Veja como aumentar o limite de memória e evitar esse erro.

Introdução

O erro "Fatal error: Allowed memory size exhausted" ocorre quando o PHP tenta alocar mais memória do que o limite configurado para o script. Esse erro é comum quando você está lidando com grandes quantidades de dados ou realizando operações complexas que consomem muita memória. Vamos explorar como corrigir esse erro.

1. Aumentando o limite de memória no PHP

Uma das soluções mais simples para esse erro é aumentar o limite de memória no PHP. Você pode fazer isso alterando o arquivo php.ini. Exemplo:

memory_limit = 256M

Isso aumenta o limite de memória para 256 megabytes. Se você estiver em um ambiente de hospedagem compartilhada e não puder alterar o php.ini, você pode tentar alterar o limite de memória diretamente no script PHP com a função ini_set(). Exemplo:

ini_set('memory_limit', '256M');

Isso permite que você aumente o limite de memória diretamente no código PHP.

2. Otimizando o uso de memória

Se você está recebendo esse erro devido ao uso excessivo de memória, é importante otimizar o código para consumir menos memória. Algumas abordagens incluem:

  • Usar funções como unset() para liberar variáveis que não são mais necessárias.
  • Processar grandes volumes de dados em partes menores, utilizando loops e a função fgets() para ler dados de arquivos grandes, em vez de carregar tudo na memória de uma vez.

Exemplo de código otimizado:

foreach ($dados as $linha) {
    // Processar a linha sem carregar tudo de uma vez
    processar($linha);
}

Essa abordagem ajuda a reduzir o consumo de memória ao processar grandes volumes de dados.

3. Verificando o consumo de memória com memory_get_usage()

Você pode usar a função memory_get_usage() para verificar o quanto de memória seu script está consumindo. Isso pode ajudar a identificar quais partes do código estão consumindo muita memória e otimizar essas áreas. Exemplo:

echo memory_get_usage(); // Mostra a quantidade de memória usada até o momento

Você também pode usar memory_get_peak_usage() para verificar o pico de memória consumida durante a execução do script.

4. Usando o Garbage Collector para liberar memória

O PHP tem um coletor de lixo (Garbage Collector) que pode ser usado para liberar memória que não está mais sendo utilizada. Se você estiver lidando com objetos grandes ou muitas variáveis, chamar o coletor de lixo manualmente pode ajudar a liberar memória. Exemplo:

gc_collect_cycles();

Isso força o PHP a liberar memória não utilizada. Use essa função quando estiver lidando com objetos grandes ou ciclos de referências.

5. Analisando o código para detectar vazamentos de memória

Se o erro persistir, pode ser que seu código tenha vazamentos de memória, ou seja, você pode estar criando objetos ou variáveis sem liberar a memória quando eles não são mais necessários. Use ferramentas como o Xdebug para analisar a memória usada pelo seu código e identificar onde o consumo excessivo de memória está ocorrendo.

Conclusão

O erro "Fatal error: Allowed memory size exhausted" ocorre quando o PHP tenta alocar mais memória do que o limite configurado. Para corrigir esse erro, você pode aumentar o limite de memória no php.ini ou no script PHP com ini_set(). Também é importante otimizar o uso de memória no seu código e verificar o consumo de memória com memory_get_usage(). Se necessário, use o Garbage Collector para liberar memória e verifique se há vazamentos de memória no seu código.

O erro "Allowed memory size exhausted" é comum em scripts que consomem grandes quantidades de memória, como quando se processa grandes arquivos ou manipula grandes volumes de dados. Aumentar o limite de memória é uma solução simples, mas é importante também otimizar o código para reduzir o consumo de memória. Usar funções como unset() e processar os dados em partes menores ajuda a reduzir a quantidade de memória necessária.

Além disso, usar o Garbage Collector do PHP pode ser uma maneira eficaz de liberar memória que não está mais sendo usada, o que pode ajudar a evitar esse erro. Se o erro persistir, vale a pena verificar o código para detectar possíveis vazamentos de memória, onde a memória não é liberada quando não é mais necessária. Ferramentas como Xdebug podem ajudar a identificar essas áreas problemáticas e garantir que seu código seja eficiente e sem vazamentos de memória.

Algumas aplicações:

  • Aumentar o limite de memória no php.ini ou no script PHP com ini_set().
  • Usar funções como unset() para liberar variáveis não utilizadas e reduzir o consumo de memória.
  • Processar grandes volumes de dados em partes menores, utilizando loops e leitura de arquivos em vez de carregar tudo na memória.
  • Usar o Garbage Collector com gc_collect_cycles() para liberar memória não utilizada.

Dicas para quem está começando

  • Se você está lidando com grandes arquivos ou volumes de dados, divida o processo em partes menores para economizar memória.
  • Use ini_set('memory_limit', '256M'); para aumentar temporariamente o limite de memória no script.
  • Se possível, evite carregar tudo de uma vez na memória, especialmente quando estiver lidando com grandes arquivos.
  • Fique atento ao uso de objetos e variáveis e libere-os quando não forem mais necessários com unset().
  • Verifique se há vazamentos de memória no código usando ferramentas como Xdebug.

Contribuições de Andressa Maria

Compartilhe este tutorial: O que causa

Compartilhe este tutorial

Continue aprendendo:

Como corrigir "PHP Fatal error: Using $this when not in object context" no PHP?

Esse erro ocorre quando você tenta usar a palavra-chave $this fora de uma classe ou método de instância. Veja como corrigir esse erro.

Tutorial anterior

Como corrigir "PHP Warning: fopen(): failed to open stream: No such file or directory"?

Esse erro ocorre quando o PHP não consegue encontrar o arquivo especificado ao usar a função `fopen()`. Veja como corrigir esse erro.

Próximo tutorial