Corrigindo o erro "Allowed memory size exhausted" no PHP

Esse erro ocorre quando o PHP excede o limite de memória configurado. Veja como corrigir aumentando o limite ou otimizando o código.

Introdução

O erro "Fatal error: Allowed memory size exhausted" no PHP ocorre quando o script tenta usar mais memória do que o PHP permite. Isso pode acontecer em scripts que processam grandes volumes de dados ou utilizam muitos recursos do sistema. Existem duas abordagens para resolver esse problema: aumentar o limite de memória ou otimizar o código para reduzir o consumo de memória.

1. Aumentando o limite de memória no php.ini

A primeira abordagem para resolver o erro é aumentar o limite de memória no arquivo php.ini. Isso pode ser feito ajustando a diretiva memory_limit:

memory_limit = 256M

Ajuste o valor conforme a necessidade do seu script. Após a modificação, não se esqueça de reiniciar o servidor web para que as mudanças tenham efeito.

2. Usando ini_set() para aumentar o limite em tempo de execução

Se você não tiver acesso ao arquivo php.ini, é possível aumentar o limite de memória durante a execução do script com a função ini_set():

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

Essa abordagem funciona apenas durante a execução do script, permitindo que você aumente o limite de memória dinamicamente.

3. Otimizando o código para reduzir o uso de memória

Se o erro continuar ocorrendo mesmo após aumentar o limite de memória, é possível que o código precise ser otimizado. Algumas práticas para reduzir o uso de memória incluem:

  • Liberar variáveis não utilizadas: Utilize unset() para liberar variáveis que não são mais necessárias:
unset($variavel);
  • Usar streams para manipulação de arquivos grandes: Ao trabalhar com arquivos grandes, use fopen() e fread() em vez de carregar o arquivo inteiro na memória de uma vez.

  • Dividir grandes arrays em partes menores: Ao processar grandes conjuntos de dados, divida o array em partes menores para evitar sobrecarregar a memória.

4. Monitorando o uso de memória com memory_get_usage()

Você pode monitorar o uso de memória do seu script em tempo real usando a função memory_get_usage():

echo memory_get_usage();

Isso pode ser útil para identificar os pontos do script onde a memória está sendo consumida em excesso.

Conclusão

O erro "Allowed memory size exhausted" no PHP pode ser resolvido aumentando o limite de memória no php.ini ou dinamicamente com ini_set(). Se o problema persistir, é necessário otimizar o código, liberando memória quando possível e utilizando abordagens mais eficientes para processar dados grandes.

Quando o PHP atinge o limite de memória, ele gera o erro "Allowed memory size exhausted". Isso pode ocorrer durante o processamento de grandes volumes de dados, como ao ler grandes arquivos ou manipular arrays muito grandes. Ao se deparar com esse erro, a primeira reação pode ser aumentar o limite de memória, mas, em muitos casos, uma otimização do código pode ser a melhor solução a longo prazo.

Algumas abordagens para reduzir o uso de memória incluem liberar variáveis não utilizadas, usar streams para processar grandes arquivos e dividir grandes arrays em partes menores. Além disso, ferramentas como memory_get_usage() podem ajudar a monitorar o consumo de memória em tempo real. A combinação dessas estratégias pode resultar em um código mais eficiente e reduzir a dependência do aumento do limite de memória.

Portanto, ao enfrentar o erro de memória, é importante primeiro tentar otimizar o código antes de apenas aumentar o limite de memória, garantindo um código mais robusto e eficiente.

Algumas aplicações:

  • Evitar falhas em scripts que consomem muitos recursos de memória.
  • Reduzir o tempo de execução ao processar grandes volumes de dados.
  • Garantir que o código não ultrapasse os limites de memória alocados.
  • Melhorar a eficiência da aplicação ao liberar memória quando não for mais necessária.

Dicas para quem está começando

  • Use ini_set('memory_limit', 'valor') para ajustar o limite de memória temporariamente.
  • Revise o código e elimine variáveis não utilizadas com unset().
  • Divida arquivos grandes em pedaços menores para evitar consumir muita memória de uma vez.
  • Monitore o uso de memória com memory_get_usage() para otimizar seu código.
  • Evite carregar grandes arquivos diretamente na memória, utilizando streams de leitura como fopen() e fread().

Contribuições de Renata Oliveira

Compartilhe este tutorial: O que causa

Compartilhe este tutorial

Continue aprendendo:

Como resolver "Fatal error: Maximum execution time exceeded" no PHP?

Esse erro ocorre quando o script PHP ultrapassa o tempo máximo de execução definido no `php.ini`. Saiba como aumentar o tempo ou otimizar seu código.

Tutorial anterior

Como corrigir "Call to a member function on null" no PHP?

Esse erro acontece quando um método é chamado em um objeto que não foi inicializado. Veja como corrigir isso.

Próximo tutorial