Os limites do PHP: memória, tempo, tamanho de upload e o que falha em silêncio

«Não consigo carregar a imagem.» «A importação pára a meio.» «O menu perdeu metade dos itens depois de gravar.» São três queixas diferentes com a mesma origem: um limite do PHP que foi atingido. A boa notícia é que quase todos se mudam no seu próprio painel, sem abrir pedido.

Os quatro que interessam, e o que cada um trava

Limite O que acontece quando é atingido
upload_max_filesize O ficheiro não carrega. O WordPress diz que o ficheiro excede o tamanho máximo. É de longe o mais atingido.
post_max_size O formulário inteiro falha, ou vários ficheiros de uma vez. Tem de ser maior do que o de cima.
memory_limit Página em branco ou erro crítico, com Allowed memory size exhausted no registo.
max_execution_time A operação pára a meio sem terminar. Típico de importações, cópias e migrações.
E há um quinto que ninguém conhece, e que falha em silêncio. O max_input_vars limita quantos campos um formulário pode enviar — não o tamanho, o número. Quando é ultrapassado, o PHP deita fora os campos a mais sem dizer nada. É a explicação para menus grandes do WordPress que perdem itens ao gravar, e para páginas de opções de temas que não guardam metade das definições. Ninguém suspeita do PHP porque não aparece erro nenhum.

Limite de memória do PHP não é a memória do plano

Confunde-se muito, e a diferença é simples.

memory_limit A memória do plano
É por pedido O tecto que um script pode gastar de cada vez.
Serve de travão Existe para impedir que um código mal feito consuma tudo e derrube o resto.
Somam-se Três visitas ao mesmo tempo, com 100 MB cada, são 300 MB de consumo — e nenhuma atingiu um limite de 128 MB.
É o total da conta O que o plano lhe dá ao todo, partilhado por tudo o que está a correr.

Daí a conclusão que interessa: subir o memory_limit não lhe dá mais recursos — só deixa cada pedido gastar mais dos que já tem. Se o problema for o plano estar no tecto, o sintoma é outro (o erro 508) e a solução também: ver os erros do site: 500, 403, 404 e 508 e como acompanhar o desempenho no cPanel.

Como mudar, sem pedir nada a ninguém

Estes quatro estão à sua disposição no cPanel — não precisa de nos escrever:

1 Abra o selector de PHP e vá ao separador das opções. Estão lá o memory_limit, o max_execution_time, o post_max_size e o upload_max_filesize.
2 Em alternativa, o MultiPHP INI Editor faz o mesmo por domínio, e o modo de edição directa deixa acrescentar o max_input_vars, que não aparece na lista básica.
3 Guarde e confirme com o phpinfo() — ver ver e ajustar a configuração do PHP. O valor tem de aparecer lá; se não aparecer, foi gravado no sítio errado.
4 Se ficou pela metade, confirme a ordem: memory_limit maior que post_max_size, e este maior que upload_max_filesize. Se estiverem trocados, o mais pequeno manda e o ajuste parece não ter feito nada.
Valores que resolvem quase tudo. Para uma loja ou um site com muitas imagens: upload_max_filesize 64M, post_max_size 128M, memory_limit 256M, max_execution_time 120 e max_input_vars 5000. Não ponha números enormes «por segurança»: um limite alto não acelera nada e só deixa um código mal feito correr mais tempo antes de falhar.

O WordPress tem um limite seu, por cima deste

Detalhe que faz perder tardes: mesmo com o memory_limit do servidor generoso, o WordPress aplica um tecto próprio. Se continuar a ver falta de memória depois de subir o do painel, acrescente ao wp-config.php, antes da linha que diz para parar de editar:

define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

O primeiro vale para o site; o segundo, mais alto, só para o painel de administração, que é onde as operações pesadas correm. Nenhum dos dois pode passar o limite do servidor — são um tecto dentro de outro. Mais sobre ler estes erros em erros comuns do WordPress.

Quando subir o limite não é a resposta

Vale a pena dizer, porque poupa tempo a toda a gente: se está a subir o mesmo limite pela terceira vez, o limite não é o problema.

1 Uma importação enorme faz-se por partes, ou pela linha de comandos, e não esticando o tempo de execução até caber.
2 Uma imagem de 40 MB não deve ir para um site. Redimensione antes — ver o site está lento.
3 Um plugin que precisa de 512 MB para desenhar uma página tem um problema, e o problema não é o servidor.
4 Se o site cresceu mesmo, a conversa passa a ser sobre o plano — ver alojamento partilhado ou VPS.

Sobre o que tratamos nós e o que fica do lado da aplicação, ver até onde vai o nosso apoio. E antes de mexer no wp-config.php ou em ficheiros de configuração, garanta que tem cópia — como repor os seus dados com o JetBackup.

Subiu os limites e continua a falhar? Mande-nos a mensagem de erro.

Abrir um pedido

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
  • 0 Utilizadores acharam útil
Esta resposta foi útil?