Tecnologias web e linguagens de programação web: html, css, php, javascript, ajax, java, jsp, asp...

terça-feira, 5 de novembro de 2013

Upload em PHP - Tutorial completo. parte 2



Vamos continuar com o tutorial de upload em php. Nesta parte do tutorial irei mostrar como mudar o nome do arquivo antes de guardar, filtrar arquivos por tipo e tamanho, exibir certa mensagem para cada tipo de erro.

É importante notar que quando carregamos um arquivo para uma pasta, se esta pasta conter outro arquivo do mesmo tipo e nome, ele ira ser substituído, isto é, o arquivo antigo será apagado. Imagina que tenha uma pasta para guardar iamgens do utilizador, um dos utilizadores carrega uma imagem com o nome image.png, se outro utilizador for a carregar outra imagem (diferente porem com mesmo nome image.png), o antigo será substituído. 
Para guardar o arquivo com um nome diferente do original, primeiro precisamos de identificar a extensão do ficheiro para adiciona-la no final do novo novo, pois se isso não for feito ira guardar um arquivo sem extensão (logo será do tipo file).

A funcao pathinfo retorna um array contend informacao de um ficheiro (metadados) como o directório em que se encontra, a extensão, nome, etc. (para mais informacoes visite http://php.net/manual/en/function.pathinfo.php ). esta função leva dois argumentos: o ficheiro e a informacao pretendinda:
$file=’c:/users/user/documents/image.png’
$extension = pathinfo($file, PATHINFO_EXTENSION); - retorna a extensao do $file “png

A seguir vams criar um nome do ficheiro associando a data e hora do sistema no momento do upload:
$fileName = date('Y') . date('m') . date('d') .’_’. time() . '.' . $extension;

Como pode ver, a data pode ate se repetir mas a hora jamais, garantindo que todos os ficheiros serão diferentes. time() retorna um valor chamado UNIX TIMESTAMP que é o número de segundos que se passaram desde 1970 até agora. É um número de 11 algarismos (até agora). O nome ficaria assim, por exemplo: 20131105_1383585505.png

Depois é só guardar o arquivo com novo nome:
move_uploaded_file($_FILES['image']['tmp_name'], ‘$up_dir’.$fileName);

A seguir vamos filtrar os arquivos carregados pelo tipo e tamanho. Para filtrar os arquivos pelo tamanho primeiro vamos definir uma constante que guarda o tamanho máximo a nossa escolha (em byte). Vamos definir tamanho máximo de 500KB (aproximadamente 100 000 bytes):
define ('MAX_FILE_SIZE', 100000);

define  é uma função para definir constantes, leva dois argumentos sendo o primeiro o nome da constante e o segundo o valor da constante. Por convenção as constantes são escritas em letras maiúsculas.

A seguir vamos usar o elemento [size]  do ficheiro carregado para determinar o seu tamanho e comparar com a constante, se for superior emitimos uma mensagem dizendo que o ficheiro é grande.

$goodSize=false;
If($_FILES['image']['size'] <= MAX_FILE_SIZE){
$goodSize=true;
}
If($goodSize){
move_uploaded_file($_FILES['image']['tmp_name'], ‘$up_dir’.$fileName);
}
Else{
$message=’O tamanho do ficheiro é maior que o exigido!’;
}


Para filtrar o arquivo carregado pelo tipo, vamos criar um array com todos os tipos aceites (para o exemplo aceita se carregamento de imagens):
$types = array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/png');
A seguir vamos usar o elemento [type] para filtrar o tipo de arquivo:
  $typeOK = false;
foreach ($types as $type) {
                    if ($type == $_FILES['image']['type']) {
                        $typeOK = true;
                        break;
                    }
                }
If($typeOK){
move_uploaded_file($_FILES['image']['tmp_name'], ‘$up_dir’.$fileName);
}
Else{
$message=’O tamanho do ficheiro é maior que o exigido!’;
}

Agora vamos combinar a filtragem por tamanho e tipo
$goodSize=false;
$typeOK = false;
define ('MAX_FILE_SIZE', 100000);
$types = array('image/gif', 'image/jpeg', 'image/pjpeg', 'image/png');
If ($_FILES['image']['size'] <= MAX_FILE_SIZE){
$goodSize=true;
}
foreach ($types as $type) {
                    if ($type == $_FILES['image']['type']) {
                        $typeOK = true;
                        break;
                    }
                }
if ($filesize && $typeOK){
move_uploaded_file($_FILES['image']['tmp_name'], ‘$up_dir’.$fileName);
}
Else{
$message=’O tamanho do ficheiro é maior que o exigido!’;
}

Agora vamos verificar a ocorrência de outros erros como nenhum ficheiro seleccionado…
switch ($_FILES['image']['error']) {
                        case 0:
             $sucesso = move_uploaded_file($_FILES['image']['tmp_name'], $up_dir .$fileName);
                            if ($sucesso) {
                                $mensagem = 'Ficheiro carregado com sucesso';
                            } else {
                                $mensagem = 'erro ao tentar gravar o ficheiro, por favor tenta de novo!';
                            }
                            break;
                        case 3:
                            $mensagem = 'Erro ao carregar ficheiro...';
                            break;
                        default:
                            break;
                    }

Pegue o projecto completo aqui

Compartilhar:
← Mensagem mais recente Mensagem antiga → Página inicial

0 comentários:

Enviar um comentário

Publicação em destaque

Adicionar Fontes Externas ao Site Usando CSS

Hoje vamos aprender uma coisa bastante simples, mas importante. Certamente já deve ter se deparado com as limitações de fontes ao criar ...

Seguidores

Total de visualizações

Com tecnologia do Blogger.

Artigos Populares

Newsletter

Subscribe Our Newsletter

Enter your email address below to subscribe to our newsletter.