PHP (Erro: Allowed memory size)

Olá queridinhos,

Estava eu, linda e pomposa, gerando meus relatórios em PDF utilizando a biblioteca mPDF. O caso não é o PDF, mas se quiserem conhecer melhor esta biblioteca clique aqui #indico.

O caso é que em um determinado momento eu gerei uma listagem grande (18 páginas em PDF), mas ao invés de visualizar o PDF lindo eu recebi o erro abaixo:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261904 bytes) in caminhoTal on line numeroTal

E aí? O que houve?

Aconteceu que o script que está sendo processado estourou o limite de memória indicado na configuração do PHP (php.ini). Sim, existe uma diretiva no php.ini chamada memory_limit que vai definir o máximo de memória que os seus scripts podem gastar. Até o PHP 5.2.0 o padrão desta variável era “8M” e a partir do PHP 5.2.0 ela recebe “16M” como padrão.

No momento eu estou com a versão 5.3.5 do PHP, mas mesmo assim a minha rotina extravazou o limite de memória.

Qual a solução?

Existe uma função do PHP que se chama ini_set e ela nos permite definir um novo valor para uma opção de configuração. Ela recebe dois parâmetros (string $varname, string $newvalue), no primeiro informamos a opção de configuração que queremos alterar e no segundo passamos o novo valor dessa configuração. Mais detalhes sobre a função ini_set aqui.

Claro que vale lembrar que alguns servidores não permitem que você altere as configurações do PHP e também bloqueiam a alteração de algumas configurações pela função ini_set, então vale verificar!

Então, antes do meu script eu inseri a seguinte linha:

<?
ini_set('memory_limit', '-1');
?>

Percebam que o meu $varname é igual a ‘memory_limit‘ e o meu $newvalue é igual a ‘-1’.

No lugar de ‘-1’ eu poderia ter informado um valor em megabytes, por exemplo “32M”, “64M” ou até “1024M”.

Acontece que neste caso eu estou gerando um relatório (listagem de dados), e essa listagem pode variar e muito no seu tamanho. Neste momento se trata de uma listagem de 18 páginas, mas futuramente ela pode ser 20, 30 ou mais páginas.

Então o $newvalue igual a ‘-1’ informa à minha configuração que eu NÃO quero impor um limite de memória neste momento.

 

Bom.. o que eu queria mostrar é isso. Espero poder ajudar alguém com isso.

Para conhecer mais algumas diretivas do php.ini leia isso.

😉

Anúncios

About ElaineCRO

Graduada em Sistemas de Informação. Programadora, apaixonada pela minha profissão, doida por forró e pelas pessoas que me dão valor. \o/

4 responses to “PHP (Erro: Allowed memory size)”

  1. Aline Santos says :

    Oi, Elaine!

    Certa vez me deparei com um engano de iniciante, que também pode causar esse erro de memória: um objeto da classe instanciado dentro do próprio construtor da classe.

  2. Reginaldo says :

    Oi Elaine

    Se você é linda e pomposa como diz, não dá pra saber 😉
    Mas a sua dica me ajudou, garota… parabéns!

    Reginaldo

  3. willams says :

    Cara você salvou a minha vida, eu estava colocando diversos valores porem nenhum dava resultado. Só foi colocar o “-1” q tudo se resolveu, vlw mesmo!

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: