Skip to content

Tudo para WordPress, desenvolvimento web — e não só

⚙️ Como corrigir o erro "The uploaded file exceeds the upload_max_filesize directive" no php.ini

⚙️ Como corrigir o erro "The uploaded file exceeds the upload_max_filesize directive" no php.ini

Faz o upload de um tema, plugin ou imagem para a biblioteca de multimédia do WordPress e vê uma linha vermelha: «The uploaded file exceeds the upload_max_filesize directive in php.ini.» O ficheiro tem 10 megabytes e o WordPress não o aceita. Uma situação familiar para qualquer pessoa que administre um site.

O problema não é do WordPress nem do seu ficheiro. Os fornecedores de alojamento limitam o tamanho dos ficheiros de upload ao nível do PHP, e o limite padrão de 2 megabytes não muda há anos. Pode aumentá-lo em cinco minutos usando qualquer um dos cinco métodos abaixo, do mais simples ao mais avançado.

💡 Visão geral rápida:

  • Aumente o limite através do wp-config.php com uma única chamada ini_set, funciona na maioria dos alojamentos
  • Altere as definições no cPanel através do MultiPHP INI Editor, se o seu alojamento usar cPanel
  • Crie ou edite o php.ini via FTP, um método que funciona independentemente do painel de controlo
  • Adicione diretivas ao.htaccess quando não tiver acesso ao php.ini
  • Como último recurso, adicione @ini_set no functions.php do seu tema filho

De onde vem o limite upload_max_filesize

A diretiva upload_max_filesize reside no ficheiro de configuração php.ini, o ficheiro principal de definições do PHP no seu servidor. Determina o tamanho máximo de um único ficheiro enviado. O valor padrão é 2 megabytes, o que é suficiente para imagens pequenas, mas um tema do WordPress ou um vídeo não cabem nesse limite.

Duas outras diretivas funcionam em conjunto com ela: post_max_size (tamanho total do pedido POST, padrão 8 MB) e memory_limit (memória disponível para o script, padrão 128 MB). As três estão interligadas: se aumentar a upload_max_filesize, verifique se a post_max_size não é inferior ao novo valor, caso contrário a restrição permanecerá no nível anterior.

Pode verificar os limites atuais diretamente no painel de administração do WordPress: vá a Multimédia → Adicionar novo e veja a linha abaixo da área de upload, que mostra o tamanho máximo. Em alternativa, instale o plugin PHP Info e encontre as diretivas relevantes na saída do phpinfo().

1. Aumentar o limite através do wp-config.php

O método mais rápido que funciona na maioria dos alojamentos partilhados. O ficheiro wp-config.php está localizado na pasta raiz do site e é carregado antes de qualquer código do WordPress ser executado, por isso as diretivas ini_set nele contidas têm prioridade.

Ligue-se ao servidor através de um cliente FTP (FileZilla, uma opção gratuita e fiável) ou abra o Gestor de Ficheiros no painel de controlo do seu alojamento. Encontre o wp-config.php na pasta raiz (normalmente public_html):

Código para wp-config.php com limite de memória aumentado

Adicione as seguintes linhas no final do ficheiro, antes do comentário /* That's all, stop editing! */:

1@ini_set('upload_max_filesize', '64M');
2@ini_set('post_max_size', '80M');
3@ini_set('memory_limit', '256M');
4@ini_set('max_execution_time', '300');

Guarde o ficheiro e atualize a página da biblioteca de multimédia do WordPress. O limite de upload deverá mudar para 64 megabytes. Se o número não tiver mudado, o fornecedor de alojamento bloqueou o ini_set, por isso passe para o método seguinte.

2. Alterar definições através do MultiPHP INI Editor no cPanel

Se o seu alojamento usar cPanel, o MultiPHP INI Editor integrado permite-lhe alterar as definições do PHP sem editar ficheiros manualmente. Aplica automaticamente os valores ao site selecionado e substitui os padrões do alojamento.

Inicie sessão no cPanel e encontre a secção Software → MultiPHP INI Editor:

Editor MultiPHP INI no cPanel com definições de PHP

Selecione o site pretendido no menu suspenso no topo da página. Desça até à diretiva upload_max_filesize e introduza o novo valor (por exemplo, 64M). Abaixo, encontre post_max_size e defina-o ligeiramente mais alto, 80M. Clique em Apply. As alterações têm efeito imediato.

Este método é preferível ao primeiro: o cPanel trata da sintaxe automaticamente e as definições não são repostas após atualizações do WordPress.

3. Editar o php.ini via FTP

Se não tiver acesso ao cPanel ou se o seu alojamento não suportar o MultiPHP INI Editor, trabalhe diretamente com o ficheiro php.ini. Este controla todas as definições do PHP e a sua modificação é a forma mais fiável de aumentar os limites.

Ligue-se ao servidor via FTP e navegue até à pasta raiz do site. Encontre o ficheiro php.ini. Se não existir (o php.ini do utilizador está frequentemente ausente em alojamentos partilhados), crie um novo ficheiro de texto com esse nome:

Conteúdo do ficheiro php.ini com definições de upload_max_filesize

Adicione as seguintes diretivas ao ficheiro:

1upload_max_filesize = 64M
2post_max_size = 80M
3memory_limit = 256M
4file_uploads = On
5max_execution_time = 300
6max_input_time = 300

Guarde o ficheiro. Para que as alterações tenham efeito, alguns fornecedores de alojamento exigem uma diretiva suPHP no ficheiro .htaccess. Adicione este bloco ao .htaccess:

1<IfModule mod_suphp.c>
2suPHP_ConfigPath /home/yourusername/public_html
3</IfModule>

Substitua yourusername pelo nome de utilizador da sua conta de alojamento. Se o site falhar com um erro após adicionar este bloco, remova-o: o seu servidor corre em CGI e não necessita de suPHP.

Em servidores locais, o caminho para o php.ini depende da plataforma: XAMPP (Windows): C:\xampp\php\php.ini; MAMP (macOS): /Applications/MAMP/conf/php/php.ini; LAMP (Linux): /etc/php/version/apache2/php.ini. Após editar, reinicie o servidor web.

4. Adicionar diretivas ao.htaccess

Quando o fornecedor de alojamento bloqueou o acesso ao php.ini e o ini_set não funciona, a última linha de defesa ao nível do servidor é o ficheiro .htaccess. Este permite-lhe definir configurações PHP para uma pasta específica do site usando diretivas php_value.

Ligue-se por FTP e localize o .htaccess na pasta raiz. Descarregue uma cópia de segurança para o seu computador (obrigatório!). Depois, adicione as seguintes linhas no final do ficheiro:

Diretivas php_value no ficheiro .htaccess para aumentar o limite de upload
1php_value upload_max_filesize 64M
2php_value post_max_size 80M
3php_value memory_limit 256M
4php_value max_execution_time 300
5php_value max_input_time 300

Guarde o .htaccess e atualize o site. Se aparecer um erro 500 Internal Server Error em vez do site, o seu servidor corre em CGI e a diretiva php_value no .htaccess não é suportada. Elimine as linhas adicionadas para restaurar o site e use o método 3 (criar o php.ini).

Abordámos o erro 500 e a sua variante 502 em detalhe no nosso guia para corrigir erros de servidor no WordPress.

5. Adicionar @ini_set no functions.php do seu tema

Este método é para situações em que todos os métodos anteriores estão indisponíveis ou pretende manter as configurações no repositório do tema. Adicione o código ao ficheiro functions.php do seu tema filho, que é executado a cada pedido e substitui os limites em tempo real.

1@ini_set('upload_max_filesize', '64M');
2@ini_set('post_max_size', '80M');
3@ini_set('memory_limit', '256M');
4@ini_set('max_execution_time', '300');

Coloque o código no final do functions.php, mas antes do fecho ?> (se existir). Use um tema filho: quando o tema principal é atualizado, as edições no functions.php do tema principal são repostas, enquanto um tema filho sobrevive às atualizações sem perdas.

Após adicionar o código, verifique o limite na biblioteca de media do WordPress. Note que em alguns alojamentos, o ini_set para upload_max_filesize está bloqueado ao nível do PHP (a diretiva PHP_INI_SYSTEM não permite alterar o valor em tempo de execução). Nesse caso, o @ini_set será silenciosamente ignorado e precisa do método 3 ou 4.

Porque é que o limite não mudou: diagnóstico

Seguiu todas as instruções, mas o limite manteve-se? Percorra esta lista de verificação:

  • post_max_size é menor do que o novo upload_max_filesize. Esta é a causa mais comum: post_max_size deve ser pelo menos igual e, de preferência, 20-30% maior do que upload_max_filesize: a documentação do PHP exige explicitamente que post_max_sizeupload_max_filesize. Os envios em lote de vários ficheiros e os campos de formulário contam para o post_max_size.
  • O ficheiro foi criado na pasta errada. O PHP procura o php.ini no diretório do script e depois sobe na árvore até à raiz do servidor. Coloque o php.ini na raiz do site (public_html) e não numa subpasta.
  • A cache do PHP (OPcache) armazena a configuração antiga. Alguns servidores guardam o php.ini em cache. Reinicie o PHP através do painel de alojamento ou aguarde 5-10 minutos para que a cache expire.
  • O servidor corre em CGI/FastCGI e ignora o .htaccess. Mude de abordagem: use o php.ini (método 3) ou o user.ini para FastCGI.
  • O fornecedor de alojamento bloqueou o limite. Em planos ultra-económicos, o limite de envio é fixo e não pode ser alterado por nenhum método, exceto atualizando o seu plano.

Se nenhum destes pontos ajudou, contacte o suporte do alojamento. Forneça o seu domínio, o método que usou para alterar o limite e peça-lhes para verificar se a substituição do upload_max_filesize é permitida no seu plano.

Tutorial em vídeo

Veja o processo passo a passo de correção deste erro, do diagnóstico à verificação final, neste vídeo:

⁉️🤔 Perguntas frequentes

Que valor devo escolher para o upload_max_filesize?

Para a maioria dos sites, 64 MB é suficiente, cobrindo uploads de temas, plugins e imagens de alta resolução. Se trabalha com ficheiros de vídeo ou grandes arquivos ZIP através do painel de administração, defina-o para 128-256 MB. Não procure gigabytes sem motivo: quanto maior o limite, mais memória o servidor reserva para cada pedido de upload.

Posso carregar um ficheiro contornando o limite?

Sim, via FTP. Um cliente FTP liga-se diretamente ao servidor e não passa pelo handler do PHP, pelo que os limites de upload_max_filesize não se lhe aplicam. Carregue o ficheiro para wp-content/uploads via FTP e, em seguida, registe-o na biblioteca de multimédia do WordPress usando o plugin Add From Server.

Qual é a diferença entre upload_max_filesize e post_max_size?

upload_max_filesize é o tamanho máximo de um único ficheiro num upload. post_max_size é o tamanho total de todo o pedido POST, incluindo todos os ficheiros, campos de formulário e cabeçalhos de serviço. Se estiver a carregar três ficheiros de 20 MB, upload_max_filesize deve ser ≥ 20 MB, enquanto post_max_size deve ser ≥ 60 MB mais uma margem para o formulário. É por isso que post_max_size é sempre definido com um valor superior ao upload_max_filesize.

Porque é que os limites são repostos após atualizações do WordPress?

O WordPress não mexe nas configurações do servidor PHP durante as atualizações, mas se editou o wp-config.php ou o functions.php do tema principal, as atualizações do core ou do tema podem ter substituído esses ficheiros. Mantenha sempre as configurações personalizadas do PHP no php.ini, no Editor MultiPHP INI do cPanel ou num tema filho: estas localizações não são afetadas pelas atualizações.

Preciso de reiniciar o servidor depois de alterar o php.ini?

Para alojamento partilhado e cPanel, não: as alterações aplicam-se automaticamente em poucos minutos. Para VPS e servidores dedicados com PHP-FPM, reinicie o serviço: sudo systemctl restart php-fpm (ou php8.3-fpm, dependendo da versão). O Apache com mod_php geralmente assume as alterações sem necessidade de reinicialização.

O que fazer se o limite continuar sem aumentar

Os cinco métodos acima cobrem virtualmente qualquer cenário de alojamento. Do básico wp-config.php ao functions.php do tema filho, percorreu toda a cadeia. Se, depois de executar honestamente cada passo e de fazer diagnósticos, o limite permanecer inalterado, a causa é uma política restritiva do fornecedor de alojamento e não poderá contorná-la sem mudar de plano ou de fornecedor.

Contacte o suporte e pergunte diretamente se é permitido substituir o upload_max_filesize no seu plano. Uma resposta negativa é motivo para considerar mudar para um VPS ou um plano partilhado mais flexível, onde controle as configurações do PHP sem se preocupar com os vizinhos de servidor. Entretanto, carregue ficheiros grandes via FTP: aí não há restrições de tamanho e o Add From Server irá integrá-los na biblioteca de multimédia.