Por que o PHP não permite enviar um arquivo maior que 2 MB?
\nVocê já tentou enviar para um site uma foto de alta qualidade, uma apresentação ou um vídeo, e o PHP respondeu secamente: «The uploaded file exceeds the upload_max_filesize directive in php.ini»? Familiar? Este é um problema clássico que aparece em um em cada dois projetos. No Stack Overflow, a pergunta «Change the maximum upload file size» acumulou dezenas de milhares de visualizações — e não é por acaso.
\nNeste artigo, vamos analisar como funciona a limitação de upload de arquivos no PHP, onde ela é configurada e como aumentar o limite corretamente. Você aprenderá não apenas sobre upload_max_filesize, mas também sobre as armadilhas que podem anular todos os seus esforços.
Como o PHP limita o upload de arquivos?
\nQuando você envia um arquivo através de um formulário, o PHP verifica seu tamanho em vários níveis. Se pelo menos um deles não permitir — o arquivo não será enviado. Vamos analisar os três principais parâmetros que precisam ser alterados para que change the maximum upload file size funcione corretamente.
\n\n1. upload_max_filesize — limite direto por arquivo
\nEste é o parâmetro mais óbvio. Ele define o tamanho máximo de um único arquivo enviado. Por padrão, o PHP usa 2M (2 megabytes). Para aumentar, por exemplo, para 100 MB, você precisa escrever:
upload_max_filesize = 100M\n\n2. post_max_size — tamanho de toda a requisição POST
\nAqui muitos caem em armadilha. Mesmo que você tenha aumentado upload_max_filesize, mas tenha esquecido do post_max_size, o upload ainda não funcionará. Por quê? Porque o arquivo é transmitido dentro da requisição POST, e se o tamanho total da requisição exceder o limite — o PHP simplesmente a cortará.
A regra é simples: post_max_size deve ser maior que upload_max_filesize. Geralmente, define-se 20-30% a mais. Exemplo:
post_max_size = 120M\n\n3. max_execution_time — tempo para upload
\nArquivos grandes não são enviados instantaneamente. Se o arquivo pesa 100 MB e a internet é lenta, o script pode simplesmente não terminar dentro do tempo permitido. Por padrão, max_execution_time = 30 segundos. Para arquivos grandes, aumente para 300-600 segundos:
max_execution_time = 600\n\n4. memory_limit — memória para processamento
\nAlguns scripts PHP carregam o arquivo na memória antes de processá-lo. Se memory_limit for menor que o tamanho do arquivo — você receberá um erro. Recomenda-se defini-lo maior que post_max_size:
memory_limit = 256M\n\nOnde e como alterar as configurações?
\nAgora que sabemos quais parâmetros são responsáveis por change the maximum upload file size, vamos analisar onde alterá-los. Você tem três caminhos principais:
\n\nMétodo 1: php.ini (arquivo de configuração principal)
\nEste é o método mais confiável. Encontre o arquivo php.ini no servidor (geralmente está em /etc/php/ ou /usr/local/etc/). Abra-o e encontre as diretivas necessárias. Se não existirem, adicione no final do arquivo:
; Permitir upload de arquivos (deve ser On)\nfile_uploads = On\n\n; Tamanho máximo de um único arquivo\nupload_max_filesize = 100M\n\n; Tamanho máximo da requisição POST\npost_max_size = 120M\n\n; Tempo de execução do script\nmax_execution_time = 600\n\n; Limite de memória\nmemory_limit = 256M\nApós as alterações, reinicie o servidor web:
\nsudo service apache2 restart # para Apache\nsudo service nginx restart # para Nginx\n\nMétodo 2: .htaccess (apenas para Apache)
\nSe você não tem acesso ao php.ini (por exemplo, em hospedagem compartilhada), pode tentar através do .htaccess na raiz do site:
php_value upload_max_filesize 100M\nphp_value post_max_size 120M\nphp_value max_execution_time 600\nphp_value memory_limit 256M\nImportante: este método funciona apenas