13 min de leitura · Guia técnico
Solucionar problemas de limitação de upload no PHP em ambientes VPS Linux requer ajustes em múltiplas configurações do servidor. Quando os uploads falham, geralmente é devido a restrições nas diretivas upload_max_filesize, post_max_size, memory_limit ou max_execution_time. Neste guia completo, você aprenderá a identificar e modificar corretamente todas as configurações necessárias para permitir uploads de arquivos maiores em seu servidor.
Pré-requisitos
- Acesso SSH ao seu servidor VPS Linux com privilégios de root ou sudo
- Servidor web instalado (Apache, Nginx ou similar)
- PHP instalado (versões 7.4, 8.0, 8.1 ou 8.2)
- Conhecimentos básicos de linha de comando Linux
- Editor de texto como nano ou vim
Entendendo as limitações de upload no PHP
Antes de modificar qualquer configuração, é importante compreender as principais diretivas do PHP que controlam os limites de upload. Estas configurações trabalham em conjunto, e ignorar qualquer uma delas pode resultar em falhas de upload mesmo após ajustes.
As quatro diretivas principais que afetam o upload de arquivos são:
- upload_max_filesize: Define o tamanho máximo permitido para upload de arquivos individuais
- post_max_size: Determina o tamanho máximo dos dados POST, que deve ser maior que upload_max_filesize
- memory_limit: Controla a quantidade máxima de memória que um script PHP pode consumir
- max_execution_time: Define o tempo máximo em segundos que um script PHP pode executar
Existe também a diretiva max_input_time, que controla o tempo máximo que um script pode gastar analisando dados de requisição, incluindo uploads.
Verificando as configurações atuais do PHP
O primeiro passo para resolver problemas de upload é identificar os valores atuais das configurações relevantes. Existem várias maneiras de verificar estas informações em seu VPS Linux.
Método 1: Usando phpinfo()
Crie um arquivo PHP temporário para visualizar todas as configurações do PHP:
echo '<?php phpinfo(); ?>' > /var/www/html/phpinfo.php
Acesse este arquivo pelo navegador (http://seu-servidor/phpinfo.php) e procure pelas diretivas mencionadas anteriormente. Após a verificação, remova este arquivo por questões de segurança:
rm /var/www/html/phpinfo.php
Método 2: Usando a linha de comando
Para verificar as configurações via terminal, execute:
php -i | grep -E 'upload_max_filesize|post_max_size|memory_limit|max_execution_time|max_input_time'
O resultado mostrará os valores atuais de cada diretiva:
memory_limit => 128M => 128M
max_execution_time => 30 => 30
max_input_time => 60 => 60
post_max_size => 8M => 8M
upload_max_filesize => 2M => 2M
Localizando o arquivo php.ini correto
As modificações nas configurações do PHP devem ser feitas no arquivo php.ini apropriado. A localização deste arquivo varia dependendo da distribuição Linux e do método de instalação do PHP.
Para encontrar o caminho do php.ini em uso, execute:
php -i | grep "Loaded Configuration File"
O resultado será semelhante a:
Loaded Configuration File => /etc/php/8.1/fpm/php.ini
Em sistemas com múltiplas versões do PHP ou diferentes SAPIs (como CLI, FPM, Apache), podem existir vários arquivos php.ini. Os locais mais comuns incluem:
- Para PHP-FPM:
/etc/php/8.1/fpm/php.ini - Para PHP com Apache (mod_php):
/etc/php/8.1/apache2/php.ini - Para PHP CLI:
/etc/php/8.1/cli/php.ini
Certifique-se de modificar o arquivo correto para o ambiente onde os uploads estão falhando.
Aumentando os limites de upload no php.ini
Após identificar o arquivo php.ini correto, você pode aumentar os limites de upload. Recomenda-se seguir estas proporções para evitar problemas:
- memory_limit > post_max_size > upload_max_filesize
Abra o arquivo php.ini com seu editor preferido:
sudo nano /etc/php/8.1/fpm/php.ini
Localize e modifique as seguintes diretivas (os valores abaixo são exemplos para permitir uploads de até 64MB):
; Aumentando o limite de tamanho de arquivo para 64MB
upload_max_filesize = 64M
; Aumentando o tamanho máximo de POST para 65MB (ligeiramente maior que upload_max_filesize)
post_max_size = 65M
; Aumentando o limite de memória para 128MB
memory_limit = 128M
; Aumentando o tempo máximo de execução para 300 segundos (5 minutos)
max_execution_time = 300
; Aumentando o tempo máximo de processamento de input para 300 segundos
max_input_time = 300
Salve o arquivo e saia do editor. Para o nano, pressione Ctrl+O, Enter e depois Ctrl+X.
Atenção: Valores muito altos podem comprometer a segurança e estabilidade do servidor. Ajuste conforme suas necessidades reais, não exagerando nos valores.
Aplicando as alterações em diferentes ambientes
Dependendo da configuração do seu servidor, você precisará reiniciar diferentes serviços para aplicar as alterações.
Para PHP-FPM
Se você estiver usando PHP-FPM (comum com Nginx ou configurações modernas do Apache), reinicie o serviço:
sudo systemctl restart php8.1-fpm
Substitua "8.1" pela versão do PHP que você está utilizando.
Para Apache com mod_php
Se estiver usando Apache com mod_php, reinicie o Apache:
sudo systemctl restart apache2
Verificando se as alterações foram aplicadas
Após reiniciar os serviços, verifique se as novas configurações estão ativas usando o método phpinfo() descrito anteriormente ou via linha de comando.
Configurando limites por diretório ou site específico
Em um VPS com múltiplos sites, você pode querer definir limites diferentes para cada site ou diretório. Existem várias maneiras de fazer isso.
Usando .htaccess (apenas para Apache)
Se você estiver usando Apache, pode definir limites específicos para um diretório criando ou editando o arquivo .htaccess:
sudo nano /var/www/html/seu-site/.htaccess
Adicione as seguintes linhas:
php_value upload_max_filesize 100M
php_value post_max_size 101M
php_value memory_limit 128M
php_value max_execution_time 300
php_value max_input_time 300
Esta abordagem não requer reinicialização do servidor, mas só funciona se o Apache estiver configurado com AllowOverride All para o diretório em questão.
Usando .user.ini (para PHP-FPM)
Para servidores usando PHP-FPM, você pode criar um arquivo .user.ini no diretório raiz do site:
sudo nano /var/www/html/seu-site/.user.ini
Adicione as configurações:
upload_max_filesize = 100M
post_max_size = 101M
memory_limit = 128M
max_execution_time = 300
max_input_time = 300
As alterações via .user.ini podem levar até 5 minutos para serem aplicadas devido ao cache do PHP-FPM.
Configurando limites no cPanel
Se seu VPS utiliza cPanel, você pode definir limites de PHP por domínio através do painel de controle:
- Faça login no cPanel como administrador
- Navegue até "MultiPHP INI Editor"
- Selecione o domínio desejado
- Modifique as diretivas upload_max_filesize, post_max_size, etc.
- Clique em "Apply" para salvar as alterações
Problemas comuns e como resolver
Sintoma: Upload falha sem mensagem de erro
Causa: Geralmente ocorre quando o tamanho do arquivo excede o limite de post_max_size.
Solução: Aumente o valor de post_max_size para ser maior que upload_max_filesize e verifique os logs de erro do PHP em /var/log/php-errors.log ou nos logs do servidor web.
Sintoma: Upload falha com erro "Maximum upload size exceeded"
Causa: O arquivo excede o limite definido em upload_max_filesize.
Solução: Aumente o valor de upload_max_filesize no php.ini ou através dos métodos específicos por diretório mencionados anteriormente.
Sintoma: Upload inicia mas termina com timeout
Causa: Os valores de max_execution_time ou max_input_time são insuficientes para arquivos grandes.
Solução: Aumente ambos os valores para 300 ou mais, dependendo do tamanho dos arquivos e da velocidade da conexão.
Sintoma: Erro "Allowed memory size exhausted"
Causa: O PHP não tem memória suficiente alocada para processar o upload.
Solução: Aumente o valor de memory_limit para pelo menos o dobro do tamanho máximo de arquivo que você deseja permitir.
Sintoma: Alterações no php.ini não surtem efeito
Causa: Você pode estar editando o arquivo php.ini errado ou não reiniciou os serviços adequadamente.
Solução: Verifique qual php.ini está sendo usado com o comando php -i e certifique-se de reiniciar o serviço correto após as alterações.
Perguntas frequentes sobre limitação de upload no PHP
Como verificar os limites atuais de upload no PHP?
Para verificar os limites atuais de upload no PHP, crie um arquivo phpinfo.php com o conteúdo '<?php phpinfo(); ?>' e acesse-o pelo navegador. Procure pelas diretivas upload_max_filesize, post_max_size, memory_limit e max_execution_time que controlam os limites de upload.
Por que meu upload falha mesmo após aumentar o upload_max_filesize?
Seu upload pode falhar mesmo após aumentar o upload_max_filesize porque existem múltiplas configurações que afetam uploads. Verifique se post_max_size é maior que upload_max_filesize, se memory_limit é suficiente, e se max_execution_time e max_input_time permitem tempo suficiente para o upload.
Onde devo modificar as configurações de upload do PHP em um VPS Linux?
Em um VPS Linux, você pode modificar as configurações de upload do PHP em três níveis: globalmente no php.ini principal, por domínio/site em arquivos php.ini específicos, ou via .htaccess para servidores Apache. A localização do php.ini principal varia conforme a distribuição e método de instalação do PHP.
É necessário reiniciar serviços após alterar limites de upload no PHP?
Sim, após alterar os limites de upload no arquivo php.ini, você precisa reiniciar o serviço PHP-FPM (systemctl restart php8.1-fpm) ou o servidor web Apache (systemctl restart apache2). Alterações via .htaccess não requerem reinicialização de serviços.
Como configurar limites de upload diferentes para cada site no mesmo VPS?
Para configurar limites de upload diferentes para cada site no mesmo VPS, use arquivos php.ini específicos em cada diretório virtual host ou configurações .user.ini para PHP-FPM. No cPanel, você pode definir limites por domínio através da seção 'MultiPHP INI Editor' no painel de controle.
Otimizando o servidor para uploads grandes
Além de ajustar as configurações do PHP, existem outras otimizações que podem melhorar o desempenho e a confiabilidade de uploads grandes em seu VPS Linux.
Ajustando configurações do servidor web
Para o Nginx, edite o arquivo de configuração do site para aumentar o buffer de cliente:
sudo nano /etc/nginx/sites-available/seu-site
Adicione ou modifique estas linhas dentro do bloco server ou location:
client_max_body_size 100M;
client_body_buffer_size 100M;
Reinicie o Nginx após as alterações:
sudo systemctl restart nginx
Configurando o limite de tempo de conexão
Para uploads muito grandes, você pode precisar ajustar o timeout do servidor web:
Para Nginx, adicione ao arquivo de configuração:
client_body_timeout 300s;
keepalive_timeout 300s;
Para Apache, edite o arquivo de configuração do VirtualHost ou .htaccess:
Timeout 300
Monitorando o uso de recursos
Ao permitir uploads maiores, monitore o uso de recursos do servidor para evitar problemas de desempenho:
sudo apt install htop
htop
Observe o uso de memória e CPU durante uploads grandes para garantir que seu servidor não esteja sobrecarregado.
Conclusão
- Solucionar problemas de limitação de upload no PHP em VPS Linux requer ajustes em múltiplas configurações, incluindo upload_max_filesize, post_max_size, memory_limit e max_execution_time.
- Sempre mantenha a proporção memory_limit > post_max_size > upload_max_filesize para evitar erros inesperados.
- Utilize configurações específicas por site quando necessário, através de .htaccess, .user.ini ou configurações do painel de controle.
- Após qualquer alteração no php.ini, lembre-se de reiniciar o serviço PHP-FPM ou o servidor web para aplicar as mudanças.
- Monitore o uso de recursos do servidor ao permitir uploads maiores para garantir estabilidade e desempenho.
Precisa de ajuda com configurações avançadas de PHP em seu servidor?
A AviraHost oferece servidores VPS Linux otimizados com suporte técnico especializado para ajudar você a configurar corretamente seu ambiente PHP para uploads de arquivos grandes e outras necessidades específicas.