Para enviar um ficheiro grande por um formulário, dois valores têm de ser altos o bastante, e o segundo tem de ser maior do que o primeiro: upload_max_filesize (o tamanho de cada ficheiro) e post_max_size (o tamanho do pedido inteiro). Se só subir o primeiro, o envio continua a falhar, e muitas vezes sem uma única mensagem.
Os limites que mandam
| Valor |
O que limita |
| upload_max_filesize |
O tamanho de cada ficheiro enviado. |
| post_max_size |
O tamanho de tudo o que o formulário envia. Tem de ser maior do que o anterior, para caber também o resto do formulário. |
| memory_limit |
Deve ficar acima do post_max_size, porque o PHP trata o pedido em memória. |
| max_execution_time e max_input_time |
Em ligações lentas, um ficheiro grande demora a chegar. Se o tempo acaba, o envio é cortado. |
| max_file_uploads |
Quantos ficheiros podem seguir num só pedido. |
Subir os valores
| 1 |
Em Select PHP Version, separador Options, suba upload_max_filesize e post_max_size, mantendo o segundo mais alto do que o primeiro.
|
|
| 2 |
Se for para uma aplicação só, ponha as linhas num .user.ini na pasta dela. Veja onde pôr cada valor.
|
|
| 3 |
Confirme o que ficou em vigor. Um ficheiro com a linha abaixo, aberto no navegador, mostra os dois valores. Apague-o depois.
|
|
| 4 |
Se a aplicação tem um limite seu (o WordPress mostra o dele no ecrã de enviar ficheiros, em Multimédia), esse é o mais baixo de todos que conta. Veja subir o limite de upload do WordPress.
|
|
<?php echo ini_get('upload_max_filesize'), ' / ', ini_get('post_max_size');
Com os limites certos e o envio a falhar
| Sintoma |
Causa provável |
| A barra de progresso chega ao fim e depois falha |
O tempo acabou (max_execution_time ou max_input_time), ou o espaço da conta esgotou-se. |
| Erro só com alguns ficheiros |
A aplicação recusa certos tipos de ficheiro. Veja o tipo, não o tamanho. |
| Erro ao gravar o ficheiro |
A pasta de destino não tem permissão de escrita, ou o espaço da conta acabou. |
| Funciona nos seus testes e falha para os visitantes |
A ligação deles é mais lenta e o tempo acaba antes de o ficheiro chegar. |
|
A falha silenciosa. Quando o pedido ultrapassa o post_max_size, o PHP deita fora tudo o que recebeu: a aplicação vê um formulário vazio, sem erro nenhum, e responde “nenhum ficheiro seleccionado” ou simplesmente volta à mesma página. Se o envio “não faz nada”, este é o primeiro valor a verificar.
|
|
Há limites fora do PHP. Se o seu domínio passa por um serviço como o Cloudflare, esse serviço também tem um tecto para o corpo de cada pedido, que depende do plano dele. E o espaço da conta tem de chegar para o ficheiro.
|
|
Para ficheiros muito grandes, não use o navegador. Um envio por SFTP é retomável e não depende destes limites. Veja SFTP em vez de FTP. Para ficheiros que os seus visitantes enviam, uma aplicação que corte o ficheiro em pedaços é mais fiável do que subir os limites para os extremos.
|
PRODUTO RECOMENDADO Alojamento de sites com cPanel Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão) Ver planos |