Alterar o tamanho máximo do arquivo de upload

513

Eu tenho um site hospedado em um PC ao qual não tenho acesso. Eu tenho um formulário de upload que permite que as pessoas enviem arquivos mp3 com até 30 MB de tamanho. Meu script do lado do servidor é feito em PHP.

Sempre que tento fazer upload de um arquivo, recebo um erro alegando que o arquivo excede o tamanho máximo permitido, por isso preciso aumentá-lo. Minha pesquisa na web sugeriu alterar o .htaccessarquivo ao qual não tenho acesso, para que não funcione. Outros sugeriram que eu deveria adicionar um php.iniarquivo personalizado à minha raiz que não funcionasse. Alguma outra sugestão?

Sua mãe
fonte

Respostas:

877

Você precisa definir o valor de upload_max_filesizee post_max_sizeno seu php.ini:

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

Após modificar o (s) arquivo (s) php.ini, você precisa reiniciar o servidor HTTP para usar a nova configuração.

Se você não pode mudar o seu php.ini, está sem sorte. Você não pode alterar esses valores no tempo de execução; uploads de arquivos maiores que o valor especificado em php.ini falharão quando a execução chegar à sua chamada ini_set.

Veja a descrição das diretivas principais do php.ini .

magro
fonte
4
você conhece a rota padrão em que o arquivo php.ini está armazenado?
Yo Momma
1
No Linux, geralmente está em / etc / php / ou algo desse tipo. Se você estiver em um servidor compartilhado, não terá sorte, a menos que seu provedor de hospedagem seja generoso o suficiente para fornecer um arquivo php.ini por usuário.
Johannes Gorset 02/02/10
4
Se você estiver usando WAMP no Windows, poderá editá-lo clicando no ícone WAMP> PHP -> php.ini. No Debian, meu arquivo de configuração está em / etc / php5 / apache2.
meagar
19
Sugiro definir um tamanho maior post_max_size. O tamanho geral dos campos postados pode ser maior que o tamanho do arquivo. Portanto, se você estiver com o caso de alguém carregando um arquivo de 40 MB, ele falhará devido a ser excedido post_max_size.
Acme #
2
Observe que memory_limit também limita o tamanho do upload.
18717 Daniel
151

Você pode alterá-lo através de um .htaccessarquivo.

.htaccessarquivos são armazenados no mesmo diretório que seus .phparquivos. Eles modificam a configuração para essa pasta e todas as subpastas. Você simplesmente os utiliza criando um .htaccessarquivo no diretório de sua escolha (ou modificando-o, se houver).

O seguinte deve permitir que você aumente seu limite de upload (se o provedor do servidor permitir alterações na configuração do PHP .htaccess).

php_value upload_max_filesize 40M
php_value post_max_size 42M
Andrew Moore
fonte
3
Parece que nem sempre funciona. Nas minhas máquinas de desenvolvimento, definir o valor apropriado em .htaccess fez o trabalho. No entanto, na hospedagem compartilhada, essa configuração não funciona, no entanto, a mensagem de erro mostra que o tamanho máximo permitido de upload é o valor que eu defini em .htaccess. Então, uma situação muito estranha acontece.
Eugeniu Torica
5
Parece que adicionar isso no .htaccess só funciona se você estiver executando o Apache. Experimente e funciona bem para mim.
precisa saber é o seguinte
Isso não funciona se essas 2 linhas no php.ini não foram comentadas :; Nome para arquivos php.ini (.htaccess) definidos pelo usuário. O padrão é ".user.ini" ;user_ini.filename = ".user.ini" ; Para desativar esse recurso definir essa opção como valor vazio;user_ini.filename =
Alan Profundo
É importante notar que, se você estiver usando apache CGI ou Fast CGI, isso causará 500 erros. Embrulhe isso dentro de <IfModule mod_php7.c> </IfModule>
Shardj
59

Eu tive o mesmo problema e criei um arquivo .user.ini e o coloquei no diretório em que o script de upload estava localizado. Do que dentro desse arquivo, defino esses dois valores:

  upload_max_filesize = 40M

  post_max_size = 40M

e funcionou muito bem para mim!

user1641252
fonte
2
Ótimo. Também funciona com o fastcgi ativado. Requer PHP5.3 ou mais recente.
Ciantic
1
Ok, isso funcionou em um servidor compartilhado quando nada mais funcionaria. Ótima descoberta.
Edward Potter
55

Você também pode usar a função ini_set (apenas para a versão PHP abaixo de 5.3):

ini_set('post_max_size', '64M');
ini_set('upload_max_filesize', '64M');

Como o @acme disse, no php 5.3 e acima, essas configurações são diretivas PHP_INI_PERDIR, portanto não podem ser definidas usando ini_set. Você pode usar o user.ini.

Manjar
fonte
38
Nas versões recentes do PHP, essas ini-settings são apenas PHP_INI_PERDIR , portanto você não pode defini-las em seu script. Veja aqui para mais detalhes.
Acme
46

Para localizar o arquivo ini, primeiro execute

php -i | grep -i "loaded configuration file"

Em seguida, abra o arquivo e altere

upload_max_filesize = 2M
post_max_size = 2M

substituindo o 2M pelo tamanho desejado, por exemplo, 100M.

Eu também tenho um post no blog com um pouco mais de informações http://www.seanbehan.com/how-to-increase-or-change-the-file-upload-size-size-in-the-php-ini- arquivo por wordpress

seanbehan
fonte
5
Ele mostra o arquivo como /etc/php5/cli/php.inimas meu arquivo de configuração é /etc/php5/apache2/php.ini. Algum tipo de engano.
Fredrick Gauss
Existem 2 arquivos php.ini ... e com esse comando em resposta, ele mostra qual deles você está usando! Então, você precisa fazer alterações para entrar em vigor!
lewis4u
40

Eu tenho o mesmo problema no passado .. e eu corrigi-lo através de .htaccessarquivo

Quando você faz alterações na configração do php, .htaccessdeve colocar as configrações na IfModuletag, exceto que ocorrerá um erro interno do servidor .

Este é um exemplo, funciona bem para mim:

<IfModule mod_php5.c>
   php_value upload_max_filesize 40M
   php_value post_max_size 40M
</IfModule>

E isso é referência php se você quiser entender mais. http://php.net/manual/en/configuration.changes.php

Eyad Farra
fonte
5
Desde que você tenha recursos de substituição.
AbsoluteZero
3
Para dar suporte ao PHP.7, adicione o mesmo bloco com: <IfModule mod_php7.c>
Mostafa
16

Resolvi esse problema criando um arquivo chamado .user.inino diretório em que residem os scripts de arquivo PHP (isso significa que qualquer script PHP neste diretório obtém o novo limite de tamanho de arquivo)

O conteúdo de .user.iniforam:

upload_max_filesize = 40M
post_max_size = 40M
Pearce
fonte
2
Esta é a solução para mim. Apenas funciona bem. Se você estiver usando uma estrutura como codeignitor, ".user.ini" precisa estar no mesmo local que index.php
The Dude
Obrigado. Isso funciona para mim. Isso é ideal para hospedagem compartilhada, onde você não tem acesso ao php.ini. Gostaria apenas de acrescentar que ele está disponível desde o PHP 5.3
yacsha
6

Eu tive o mesmo problema. Eu tentei três maneiras que geralmente eram sugeridas:

  1. functions.php
  2. php.ini
  3. .htaccess

nenhum se isso resolveu meu problema. Estou usando o godaddy e me deparei com uma solução sugerida que era:

  1. chegou a Hospedagem na Web , depois Gerenciar
  2. Em Software, selecione Selecionar versão do PHP
  3. Selecione Alternar para opções do PHP, localizado no canto superior direito da tabela, na cor da fonte: azul
  4. Na parte inferior, você provavelmente terá upload_max_filesize = 2M
  5. Agora, fique à vontade para mudar isso
  6. Certifique-se de clicar no botão Salvar botão !
  7. Agora vá ao seu painel wp-admin, selecione Mídia e depois Adicionar

Voila! Agora você tem um tamanho máximo de arquivo de upload máximo diferente :)

nrmb
fonte
6

Muitas vezes eu notei que o site com hospedagem compartilhada não permite alterar as configurações nos arquivos php.ini. também não é possível criar arquivo .htaaccess. em tal situação, pode-se tentar seguir as coisas

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);
A Academia EasyLearn
fonte
6

as respostas são um pouco incompletas, 3 coisas que você precisa fazer

no php.ini da sua instalação do php (nota: dependendo se você desejar para CLI, apache ou nginx, encontre o php.ini certo para manipular. Para o nginx, ele geralmente está localizado /etc/php/7.1/fpmonde 7.1 depende da sua versão. Para o apache geralmente /etc/php/7.1/apache2)

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

ou defina outros valores. Reinicie / recarregue o apache se você tiver o apache instalado ou o php-fpm para nginx se você usar o nginx.

Toskan
fonte
5

Bem, eu gostaria de adicionar meus 2 centavos aqui.

Estou usando hospedagem compartilhada e lidei com esse problema muitas vezes, tentei resolvê-lo sozinho, mas sem sucesso. Finalmente, consegui resolvê-lo através da verificação de várias fontes da web e do contato com meu provedor de serviços de hospedagem. Minhas perguntas foram "Como posso alterar o valor php memory_limitem hospedagem compartilhada?", "Como posso alterar o valor php upload_max_filesizeem hospedagem compartilhada?", "Como posso alterar o valor php max_input_varsem hospedagem compartilhada?", "Como posso alterar o valor php max_execution_timeem shared webhosting? "," Como posso alterar o valor php max_input_timeno shared webhosting? " e muito mais, configurando ou alterando php.ini ou .htaccessarquivo. Eu tentei mudá-los, mas surgiram problemas. Por fim, entrei em contato com meu provedor de hospedagem e, ao definir o php como nativo, eles mudaram para o php 5.6,

"Seu PHP foi definido no modo 'nativo', o que significa que você não pode substituir esses valores. Eu mudei você para apenas '5,6', então você deve estar pronto."

Depois disso, conectei meu site através do ftp Filezilla, também não se esqueça de fazer com que o serviço ftp mostre arquivos ocultos e o computador local, porque o .htaccessarquivo estava oculto no meu laptop local e no meu site. Ele estava disponível na pasta public_html, eu apenas baixei e adicionei os seguintes códigos ao final do arquivo e, em seguida, carreguei de volta no servidor:

php_value memory_limit 256M
php_value post_max_size 256M
php_value upload_max_filesize 64M
php_value max_input_vars 1800
php_value max_execution_time 300
php_value max_input_time 300

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Por enquanto, tudo está funcionando corretamente; se algum de vocês superar alguns problemas, escreva aqui e me avise para que eu possa alterar os códigos mostrados acima. A propósito, eu também envio algumas fotos que mostram a mudança.

Mais uma coisa que eu quase esqueci de mencionar a instalação do ZipArchive em seu serviço de hospedagem compartilhada, eu consegui esse requisito, basta ir para as configurações de php no meu cpanel, clicar nas extensões do seletor de php e depois marcar a seção zip, só isso.

Obrigado.

PS: Estou aberto a boas práticas e, se você encontrar alguma prática ruim aqui, entre em contato, tentarei alterá-las. Obrigado.

garakchy
fonte
4

Talvez isso deva ser um comentário para @ seanb123 e @Fredrick Gauss comentando seu comentário, mas para mim no Drupal 8.1 com PHP 7 o arquivo que eu precisava modificar estava localizado aqui:

/etc/php/7.0/apache2/php.ini

Modifiquei provavelmente outros quatro arquivos php.ini, incluindo o que meu sistema chamou de "Arquivo de configuração carregado" ( php -i | grep -i "loaded configuration file") e o encontrado na página info.php, mas nenhum deles ajudou. A chave para descobrir o caminho correto foi encontrada em um site a partir de 2012. Eles disseram que o caminho"/etc/php5/apache2/php.ini" foi preterido até VOLTAR ENTÃO, mas me deu uma pista de onde encontrá-lo. Para o PHP7, é um pouco diferente do PHP5, mas o conceito é o mesmo.

Talvez isso ajude alguns idiotas desamparados como eu.

Dito isto, a resposta para o OP no meu caso seria que alguém com privilégios de administrador na caixa teria que fazer isso.

O site que me ajudou: http://www.evilbox.ro/linux/remove-ispconfig-maximum-upload-size-of-2m-for-wordpress/

Isso também é abordado aqui: Importar limite de tamanho de arquivo no PHPMyAdmin

EDIT: o texto completo da minha nota para mim:

Para alterar o tamanho máximo do upload, edite upload_max_filesize e [se necessário?] Post_max_size em /etc/php/7.0/apache2/php.ini (ou em versões anteriores: /etc/php5/apache2/php.ini)

/etc/init.d/apache2 restart

EDITAR NOVAMENTE: como você está importando arquivos grandes, pode ser necessário alterar o tempo limite para processá-los. No meu caso, o arquivo chamado "config.default.php" foi encontrado /usr/share/phpmyadmin/libraries/config.default.phpcom a variável $cfg['ExecTimeLimit'] = 300; que alterei a minha para 900 para uma importação enorme, por exemplo. Depois, você precisa reiniciar o apache

seizethecarp
fonte
3

Nenhuma dessas soluções funciona para mim !! (já definido para 32M por padrão). O problema é na maioria dos casosmax_allowed_packet

Estou trabalhando no localhost e usando MAMP.

Aqui estão as soluções;

1. Se você não tem my.ini

Adicionar

--max_allowed_packet=168435456

Para

...\MAMP\bin\startMysql.sh

2. Se você possui my.ini

Debaixo

[mysqld]

Adicionar

max_allowed_packet=100M

FEITO!

ErcanE
fonte
Adicionamos max_allowed_packet = 128M ao php.ini e .user.ini e isso foi feito por mim!
Molasar 07/04/19
2

Três coisas que você precisa verificar.

upload_max_filesize, memory_limitepost_max_size no arquivo de configuração php.ini exatamente.

Todas essas três configurações limitam o tamanho máximo de dados que podem ser enviados e manipulados pelo PHP.

Normalmente post_max_sizee memory_limitprecisa ser maior que upload_max_filesize.


Portanto, três variáveis ​​no total você precisa verificar para ter certeza absoluta.

prosti
fonte
2

Com WAMPtudo é muito fácil

WAMP Ícone> PHP> Configurações do PHP> upload_max_filesize = nM> n = (2M, 4M, 8M, 16M, 32M, 64M, 128M, 256M, 512M ou Escolha (personalizado)).

Os serviços são recarregados automaticamente.

Mas, se você realmente não tem acesso ao servidor, pode querer explorar a criação de uma chunkingAPI.

SimonB
fonte
0

Eu também tive esse problema e o corrigi definindo essa configuração em /etc/nginx/nginx.conf

client_max_body_size 0;

0, como em ilimitado.

E também, se você tiver um proxy reverso em execução com o nginx, esse servidor também deverá ter essa configuração (foi isso que me assustou aqui)

Typewar
fonte
0

Se você editou o arquivo php.ini correto, reiniciou o Apache ou o Nginx e ainda não funciona, é necessário reiniciar o php-fpm também:

sudo service php-fpm restart 
Adrian Onu
fonte
0

Como mudar globalmente é um pouco arriscado, eu estava tentando aumentar o valor máximo de upload para um único script big_file_upload.php . Por alguma razão ini_setnão ajudou. Depois de algumas pesquisas, eu vim com isso. Coloque-o .htaccess(a menos que o nome seja alterado por AccessFileName)

<If "%{REQUEST_URI} == '/subfolder/big_file_upload.php'" >
php_value upload_max_filesize 200M
php_value post_max_size 200M
</If>
<Else>
php_value upload_max_filesize 1M
php_value post_max_size 1M
</Else>

Trabalhou para mim.

Hebe
fonte