Minha foto
Rafael Carvalho
Programador atuando na área de web com Ruby e PHP principalmente. Estudante de Ciência da Computação.
Visualizar meu perfil completo

quinta-feira, 25 de junho de 2009

Configuração de upload em PHP

O programador não pode esquecer de algumas coisas quando vai trabalhar com upload de arquivos em PHP. Principalmente as diretivas do php.ini.


As que ninguém esquece:


upload_max_filesize



define qual o tamanho máximo permitido por arquivo. o valor padrão é 2 megas. se o arquivo exceder esse limite, $_FILES["file"]["error"] chega com valor 1.


file_uploads


define se é permitido o upload de arquivos. o valor padrão é On.


upload_tmp_dir


define o diretório temporário usado para guardar os arquivos de upload. o usuário que está executando o web script (em geral, o mesmo usuário do Web Server) deve ter permissão de escrita nesse diretório. se não for especificado, será usado o diretório temporário padrão do sistema.


O que quase ninguém lembra:


post_max_size


muito importante! define o tamanho máximo dos dados enviados via POST. isso afeta diretamente o upload de arquivos. esse valor deve sempre ser maior que upload_max_filesize! o valor padrão é 8 megas.


se o tamanho de dados exceder o valor de post_max_size, $_POST e $_FILES chegarão vazios. e por isso
eu
muita gente
fica horas pra descobrir porque consegue fazer upload de arquivos pequenos mas não consegue com arquivos grandes. não dá erro, o arquivo simplesmente não chega. diferente do que acontece quando o arquivo excede apenas o upload_max_filesize.


memory_limit


define a quantidade máxima de memória que o script pode alocar. isso também afeta upload de arquivos. o manual do PHP fala que memory_limit deve ser maior que post_max_size, mas eu mesmo já consegui fazer upload de arquivos maiores que o valor configurado nessa diretiva. vai entender! valor padrão: 128 megas.


observação importante: todas essas diretivas que definem tamanho recebem o valor em bytes. porém, como o PHP tem a péssima mania de querer fazer tudo ao mesmo tempo, pode ser usado uma notação mais amigável: K (pra Kilobyte), M (pra Megabyte) and G (pra Gigabyte). por exemplo: 1K ao invés de 1024. isso só vale dentro do php.ini.


exemplo prático do uso das diretivas acima. no php.ini:



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

; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not specified).
; upload_tmp_dir =

; Maximum size of POST data that PHP will accept.
post_max_size = 128M

; Maximum amount of memory a script may consume (8MB)
memory_limit = 256M

0 comentários:

Postar um comentário

Twittadas

Flickr