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
0 comentários:
Enviar um comentário