Não é possível fazer upload de arquivos maiores que 1 GB no PHP no Apache, mesmo com 'post_max_size' e 'upload_max_filesize' definido como 4096M


1

Pelo que entendi, ao hospedar um servidor da web com Apache e PGP, as três configurações php.inique determinam o tamanho máximo de upload são:

  1. memory_limit
  2. post_max_size
  3. upload_max_filesize

Como eu li, memory_limitdeve ser maior que post_max_sizee post_max_sizedeve ser maior que upload_max_filesize. A partir daí, o menor, o que seria upload_max_filesize, na verdade, seria o verdadeiro limite para o tamanho do upload, dentro das configurações do Apache.

Portanto, se o exposto acima é verdadeiro, é verdade que o tamanho máximo real do arquivo que pode ser carregado em um servidor da web através do PHP em execução com Apache é igual à memória física no dispositivo que hospeda? Além das limitações de gravação em disco, como o NTFS limita o tamanho do arquivo a 4 GB por arquivo?

O motivo pelo qual estou perguntando isso é meu post_max_sizee upload_max_filesizeestá definido como 4096M, mas enquanto arquivos com menos de 1 GB são carregados sem problemas, arquivos com mais de 1 GB não. Então, seria memory_limitum fator contribuinte para algo assim?


O FAT limita o tamanho do arquivo a 4 GB por arquivo. Com o NTFS, o limite é de 16 exabytes.
grawity

O Apache não tem nada a ver com o que você está perguntando. O que você está falando sobre PHP e PHP é executado como um módulo com Apache.
JakeGould

@grawity O cartaz original diz claramente: “Além de limitações de escrita em disco ...” A questão é basicamente sobre o conselho confuso que existe no manual oficial PHP que afirma: “De um modo geral, memory_limitdeve ser maior do que post_max_size.”
JakeGould

Respostas:


2

Você pergunta:

Portanto, se o exposto acima é verdadeiro, é verdade que o tamanho máximo real do arquivo que pode ser carregado em um servidor da web através do PHP em execução com Apache é igual à memória física no dispositivo que hospeda?

Não. Você está interpretando corretamente os maus conselhos memory_limitque o fazem pensar que esse é o caso quando a realidade memory_limittem pouco ou nada a ver com o tamanho do upload do arquivo. memory_limité puramente sobre memória de processo PHP e não tem nada a ver com processos de transferência de arquivos.

Aqui está o porquê ...

Os únicos dois itens que são preocupantes ao fazer upload de um arquivo usando PHP e Apache são:

  • post_max_size: Define o tamanho máximo permitido dos dados de postagem. Essa configuração também afeta o upload do arquivo. Para fazer upload de arquivos grandes, esse valor deve ser maior que upload_max_filesize. De um modo geral, memory_limitdeve ser maior que post_max_size.
  • upload_max_filesize: O tamanho máximo de um arquivo carregado.

memory_limitnão tem absolutamente nada a ver com o transporte de arquivos nessa configuração. Tudo o que memory_limitfaz é controlar a quantidade de memória que cada processo PHP recebe se estiver processando algo internamente. Eu transferência de arquivos não tem nada a ver com memory_limit.

  • memory_limit: Define a quantidade máxima de memória em bytes que um script pode alocar. Isso ajuda a evitar scripts mal escritos para consumir toda a memória disponível em um servidor. Observe que, para não ter limite de memória, defina esta diretiva como -1.

Dito isto, o manual do PHP - como citado acima - diz:

De um modo geral, memory_limitdeve ser maior que post_max_size.

Isso não faz sentido e é considerado um erro se você pensar sobre isso. memory_limité uma restrição de quantos dados podem ser manipulados por um processo PHP na RAM. Mas, como eu disse antes, uma transferência de arquivos é um processo de streaming de dados e o PHP não armazena o conteúdo do arquivo na RAM por mais tempo do que antes de gravá-lo no sistema de arquivos.

Essa resposta de estouro de pilha indica tanto. E essa outra resposta explica de maneira mais eloquente e sucinta:

Somente se você planeja ler um arquivo inteiro na memória e o arquivo em que você lê é maior que o espaço que você alocou no PHP (ou seja memory_limit), nesse caso, você ficará sem memória.


Você está certo, pois eu estava me referindo ao manual, e é por isso que também achei confuso. Desculpe, eu não vi essa resposta quando fiz minhas pesquisas. Portanto, com base no conhecimento acima, se meus post_max_size e upload_max_filesize = 4096M, mas arquivos um pouco menos de 1 GB não carregam nenhum problema, e arquivos com mais de 1 GB não, quais são outras possibilidades para a limitação?
23818 Eric F #

@ EricF é sua pergunta real? Nesse caso, você realmente deve editar sua pergunta para fazer essa pergunta em vez de fazer o que está fazendo agora. Heck, eu apenas fui em frente e editei a pergunta. Geralmente, não caia na armadilha do “ problema XY ”; basta fazer sua pergunta e ser claro.
precisa saber é o seguinte

Eu posso também pedir-lo como uma nova questão, então, como aqui a sua resposta não respondeu à minha pergunta que fiz corretamente
Eric F
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.