Enviar ficheiros grandes em PHP: upload_max_filesize e post_max_size

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.

Subiu os dois valores e o envio continua a falhar? Diga-nos a página e o tamanho do ficheiro.

Abrir um pedido de suporte

VEJA TAMBÉM

Os limites do PHP: memória, tempo e tamanho de upload

Subir o limite de upload do WordPress

php.ini e .user.ini: onde pôr cada valor

SFTP em vez de FTP

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 321,75 MT/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?