Erro Fatal de Memória PHP: 128MB Esgotados e Como Resolver

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

«Allowed Memory Size of 134217728 Bytes Exhausted» — O freio de emergência da sua aplicação PHP

\n\n

Você já viu essa mensagem no meio da madrugada, quando o site cai do nada e nos logs aparece aquela frase assustadora? Se sim, você não está sozinho. Milhares de desenvolvedores no Stack Overflow já se perguntaram por que seu script PHP, aparentemente inofensivo, de repente "devora" todos os 128 megabytes de RAM e trava com um erro fatal.

\n\n

Vamos entender o que essa mensagem realmente significa, por que ela acontece e, o mais importante, como corrigi-la de uma vez por todas. Não vamos apenas aumentar o limite de memória — vamos aprender a escrever um código que não suga recursos como um aspirador de pó.

\n\n

O que significa «134217728 Bytes Exhausted»?

\n\n

O número 134.217.728 equivale a 128 megabytes. Essa é a quantidade de memória que o PHP permite que seu script use por padrão. Quando o script tenta alocar mais do que isso — bum! — você recebe o Fatal Error. É um mecanismo de proteção para evitar que um único script derrube o servidor inteiro.

\n\n

Mas aqui está o problema: 128 MB é muito pouco para aplicações modernas. Processar um arquivo XML enorme, gerar relatórios do banco de dados, trabalhar com imagens ou bibliotecas pesadas — tudo isso pode facilmente estourar o limite.

\n\n

Por que isso acontece? Três causas principais

\n\n
    \n
  • Loops gananciosos e recursão — quando você carrega todos os dados na memória de uma vez, em vez de processá-los em partes.
  • \n
  • Vazamentos de memória — variáveis estáticas, arrays globais e o uso incorreto de static podem acumular dados sem liberação.
  • \n
  • Bibliotecas e extensões pesadas — como processamento de imagens com GD ou manipulação de PDFs.
  • \n
\n\n

Como corrigir o erro: do simples ao avançado

\n\n

Método 1: Aumentar o limite de memória (solução rápida)

\n\n

A maneira mais óbvia é simplesmente dar mais memória ao PHP. Mas lembre-se: isso é um analgésico, não uma cura. Se seu código for mal escrito, ele vai consumir 512 MB e até 1 GB sem piedade.

\n\n

Existem três formas de aumentar o limite:

\n\n

1. No arquivo php.ini (alteração permanente):

\n
memory_limit = 256M
\n\n

2. No .htaccess (se disponível):

\n
php_value memory_limit 256M
\n\n

3. Direto no script (apenas para a execução atual):

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

Mas um aviso: se você estiver em um servidor compartilhado, a hospedagem pode não permitir aumentar o limite além de um certo valor. E mesmo que permita — não abuse.

\n\n

Método 2: Otimização de código — a solução definitiva

\n\n

Em vez de dar mais memória ao script, vamos ensiná-lo a usar o que já tem de forma inteligente.

\n\n

Use unset() para liberar memória

\n\n

PHP não é C++, mas o gerenciamento manual de memória ainda funciona. Quando uma variável grande não for mais necessária — elimine-a:

\n\n
$data = file_get_contents('arquivo_gigante.csv');\n// processa os dados\nprocessData($data);\n// libera a memória\nunset($data);\n
\n\n

Processe dados em partes

\n\n

Em vez de carregar 100.000 linhas do banco de dados na memória, use cursores ou limites:

\n\n
// RUIM: carrega tudo na memória\n$usuarios = $db->query("SELECT * FROM usuarios")->fetchAll();\n\n// BOM: processa uma linha por vez\n$stmt = $db->query("SELECT * FROM usuarios");\nwhile ($linha = $stmt->fetch()) {\n    processaUsuario($linha);\n    // O PHP libera a memória automaticamente após cada iteração\n}\n
\n\n

Use geradores (yield)

\n\n

Geradores são mágicos para trabalhar com grandes conjuntos de dados. Eles não armazenam todos os valores na memória:

\n\n
function getLargeData() {\n    for ($i = 0; $i < 1000000; $i++) {\n        yield $i;\n    }\n}\n\nforeach (getLargeData() as $valor) {\n    // processa um elemento de cada vez\n    echo $valor . "\\n";\n}                

Blogs

Book Recommendations