A mensagem completa diz “Allowed memory size of … bytes exhausted (tried to allocate … bytes)”. Significa que um único pedido tentou usar mais memória do que o memory_limit do PHP deixa. A correcção rápida é subir esse valor; a correcção a sério é saber quem a gastou.
Descobrir quem gastou
No fim da mensagem vem um caminho e um número de linha. Esse caminho responde à pergunta mais depressa do que qualquer palpite.
| O caminho aponta para… |
Quer dizer |
O que fazer |
| wp-content/plugins/nome |
Um plugin está a gastar demais, normalmente numa tarefa pesada (cópias, importação, relatórios). |
Suba o limite para a tarefa acabar, e depois veja se há versão nova ou alternativa mais leve. |
| wp-content/themes/nome |
O tema ou um construtor de páginas a carregar muito. |
Suba o limite. Se continua a faltar, o tema é pesado para o plano. |
| Ficheiros de imagem (gd, imagick) |
Uma fotografia enorme a ser processada. |
Reduza a imagem antes de a enviar. O gasto cresce com as dimensões, não com o peso do ficheiro. |
| Código seu, sempre no mesmo sítio |
Um ciclo que não acaba, ou uma lista inteira carregada de uma vez. |
Aqui subir o limite só adia o erro. Corrija o código. |
Subir o limite
| 1 |
No cPanel abra Select PHP Version, escolha a versão que o site usa e abra o separador Options.
|
|
| 2 |
Procure memory_limit e escolha um valor acima do actual, um degrau de cada vez.
|
|
| 3 |
Se só uma aplicação precisa, ponha antes um .user.ini na pasta dela com uma linha como memory_limit = 256M (exemplo). Veja onde pôr cada valor.
|
|
| 5 |
Repita a acção que dava o erro. Se passar, pare aqui.
|
|
Para confirmar que o valor novo está em vigor, abra um ficheiro com <?php phpinfo(); na pasta do site e procure memory_limit: a coluna Local Value é a que conta. Se o número não mudou, foi gravado no sítio errado, ou o site corre noutra versão do PHP. E antes de subir muito o limite, experimente desactivar os plugins um a um e repetir a acção: se o erro desaparece com um deles desligado, o problema não era o limite.
|
O memory_limit não é a memória da sua conta. É o tecto por pedido. A conta tem os seus próprios limites de memória e de processos, e se o pedido os ultrapassar o resultado é um erro 500 ou 508 e não uma subida de limite. Veja os limites que ninguém anuncia e os erros do site explicados.
|
|
Se a mensagem só aparece numa tarefa pesada (importar, exportar, gerar cópias), considere correr essa tarefa por linha de comandos ou por cron, onde não há pedido web. Veja correr um script PHP numa tarefa agendada.
|
PRODUTO RECOMENDADO Alojamento de sites com cPanel Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 9.000,00 Kz/mês Ver planos |