Pergunta

Eu tenho um formulário PHP para upload de arquivos e funciona bem e exibe uma mensagem de erro se algo deu errado. Isso tudo é bom.

O problema é quando eu teste com um arquivo realmente grande, ele apenas atualiza a página, como se eu não tivesse enviado um arquivo em tudo, e nenhum dos $ _POST variáveis ??do formulário são mesmo enviados para o servidor.

Eu quero exibir um erro para o usuário, informando que o arquivo é muito grande. No entanto, eu não posso fazer isso.

Alguém sabe o que está acontecendo?

Foi útil?

Solução

Verifique se o seu arquivo ini PHP, que rege o quão grande um arquivo PHP permitirá a ser carregado. Essas variáveis ??são importantes:

  • max de upload filesize (upload_max_filesize)
  • tamanho dos dados pós max (post_max_size)
  • limite de memória (memory_limit)

Qualquer envios fora destes limites será ignorado ou errored-out, dependendo de suas configurações.

Esta seção na documentação tem o melhor resumo: http://ca3.php.net/manual/en/features.file-upload.common-pitfalls.php

EDIT: Note também que a maioria dos navegadores não irá enviar uploads mais 2GB de tamanho. Este link está desatualizado, mas dá uma idéia: http://www.motobit.com/help /scptutl/pa98.htm . Alguém tem uma melhor fonte de informação sobre isso?

Há também limites que podem ser impostas pelo servidor, tais como Apache: http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestbody

Para realmente ver o que está acontecendo, você provavelmente deve verificar seus logs do servidor web, verificar o limite de upload navegador (se você estiver usando o Firefox), e tentar ver se print_r($_FILES) gera quaisquer números de erro úteis. Se tudo isso falhar, tente o monitor de tráfego net no Firebug. A chave é determinar se o pedido for mesmo indo para o servidor, e se é o que o pedido (incluindo os cabeçalhos) parece. Uma vez que você chegou tão longe na cadeia, então você pode ir para trás e ver como PHP está a lidar com o upload.

Outras dicas

Seu $ _POST é mais provável esvaziar porque o carregamento excedeu o post_max_size directiva:

A partir do PHP directivas página :

Se o tamanho dos dados for maior que post_max_size, o $ _POST e US $ _FILES superglobais estão vazios . Isso pode ser monitorado de várias maneiras, por exemplo. passando a variável $ _GET para o roteiro de processamento dos dados, isto é, <form action="edit.php?processed=1">, e em seguida, verificar se $ _GET [ 'processado'] está definido.

Você não pode saber o tamanho do arquivo que está sendo carregado, até que ele seja totalmente carregado. por isso, se você quiser determinar o tamanho do arquivo, e depois mostrar um erro para arquivos grandes, primeiro você deve ter o arquivo carregado, em seguida, verificar o tamanho do arquivo. inorder para ter um grande arquivo carregado, você deve definir 2 configurações no seu arquivo de configuração do PHP, php.ini. abri-lo e procurar "upload_max_filesize" e defina o valor para o valor máximo que você deseja. em seguida, você deve definir o valor máximo para parâmetros POST, porque os arquivos enviados são recebidos através do método HTTP POST. encontrar "post_max_size" e configurá-lo para um grande valor a.

Gostaria de implementar um script simples que faz chamadas ajax regulares para saber quanto do upload foi feito. Você pode, então, implementar algum tipo de barra de progresso. Há um par de exemplos na net:

http://martinjansen.com/ 2007/04/28 / file-upload-Progress-bares-com-php /

max de upload filesize (upload_max_filesize) tamanho dados pós max (post_max_size) são as diretrizes que precisam ser configurados. Eu testei com OS múltipla, navegadores etc e estes são os dois únicos coisa que você precisa se preocupar.

apart formar as opções como os antigos usuários responderam:

max upload filesize (upload_max_filesize)
max post data size (post_max_size)
memory limit (memory_limit)

também há um, quando o arquivo é muito grande, ou a linha está ocupada, não precisa de muito tempo para executar esta operação, que vai bater a ceil do limite de execução do script.

max_execution_time
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top