Vamos criar a classe que irá fazer upload de imagens para o nosso servidor.
Antes de criar a nova classe vamos criar um formulário simples para exemplificar o processo completo.
Neste formulário iremos inserir um elemento input do tipo FILE. Assim teremos os dados da imagem que iremos subir.
O HTML input file é utilizado quando queremos enviar arquivos para o servidor, em diferentes formatos, como texto, pdf, vídeo, imagem, entre outros. Quando utilizamos o tipo FILE, será enviado um array de informações sobre o arquivo que foi selecionado.
A super global $_FILES recebe o array que contém informações sobre o arquivo enviado ao servidor por meio de um formulário de upload. Entre estas informações podemos citar o nome, o tipo, tamanho e nome temporário do arquivo. No exemplo "imagem" é o nome do controle informado no name do input <input type="file" name="imagem"> no formulário.
No mesmo arquivo que criamos o formulário sobeimagem.php, vamos criar o código php que vai receber essas informações.
Para testar o comando, rode o programa e escolha um arquivo para upload. Você terá um resultado parecido com o do exemplo.>
Resultado do código acima:
Agora que vimos como funciona o tipo FILE e como recebemos as informações no php pela super global $_FILES, vamos dar inicio a construção da nossa classe.
Esta classe prevê alguns atributos, como:
O método iniciaObj() será o responsável por atribuir valores para alguns atributos da imagem. Que serão enviados pelo formulário de upload. Durante o nosso desenvolvimento da classe pode ser necessário acrescentar algum atributo ou alterar algum método.
Este método será o responsável por mostrar os dados da imagem de uma forma mais amigável identificando cada atributo carregado pelo iniciaObj().
Após criar os dois primeiros métodos da classe Imagem.class.php, vamos efetuar um teste utilizando o mesmo código que já utilizamos anteriormente, apenas substituindo o comando var_dump pelos comandos da classe.
Resultado do código acima:
Este método irá extrair do nome original da imagem, a extensão do arquivo que será enviado, sendo assim possível testar se o tipo de arquivo é compatível com o que é esperado pelo sistema.
A função strtolower() transforma a string para letras minúsculas. E a função strrchr()recebe dois argumentos, uma string e um caractere. Esta função pesquisa o caractere fornecido na string fornecida e retorna a parte da string começando na última ocorrência do caractere fornecido nessa string.
Para testar este método vamos utilizar o mesmo arquivo do nosso formulário sobeimagem.php, acrescentando o método novo antes do método mostraObj().
Resultado do código acima:
Este método irá testar se a extensão do arquivo enviado é válido, se é um tipo de imagem que o sistema irá aceitar.
Ele será invocado pelo método preparaImg(). Se a extensão da imagem for encontrada na variável $tipos,a função irá retornar a variável $achou com um valor TRUE, caso contrário essa variável terá o valor FALSE.
A função strcasecmp()é usada para comparar duas strings fornecidas. Não faz distinção entre maiúsculas e minúsculas. Após o teste esta função retorna um número inteiro com base nas condições descritas abaixo:
Valor de retorno | |
---|---|
strcasecmp() retorna zero | Se as duas strings forem iguais |
strcasecmp() retorna menor que 0 | Se string1 for menor que string2 |
strcasecmp() retorna maior que 0 | Se string1 for maior que string2 |
Para testar este método vamos utilizar o mesmo arquivo do nosso formulário sobeimagem.php, acrescentando o método novo após o método mostraObj(). Para ter acesso ao retorno vamos invocar este método dentro de um var_dump(). O comando fica como a seguir, var_dump($foto->validaExtensao());
Resultado do código acima:
Este método irá dar um novo nome para imagem que será enviada para o servidor, neste momento a imagem terá uma identificação que contem o diretório em que a foto será armazenada, o id da foto, o primeiro nome da pessoa e a extensão do arquivo. Este novo nome composto será atribuído ao atributo $this->novonomeimg.
Para testar este método vamos utilizar o mesmo arquivo do nosso formulário sobeimagem.php, acrescentando o método novo após o comando var_dump(validaExtensao()); e para poder ver o resultado, vamos invocar o método mostraObj() por último.
Resultado do código acima:
Note que o atributo NOVO NOME DA IMAGEM, agora tem um valor atribuído.
Este método irá verificar se o tamanho em bytes da imagem está dentro do tamanho permitido para ser enviado ao servidor. Se o tamanho estiver acima do permitido o método irá atribuir um valor TRUE a variável $achouerro, caso contrário irá atribuir um valor FALSE. Em seguida irá retornar a variável $achouerro.
Para testar este método vamos utilizar o mesmo arquivo do nosso formulário sobeimagem.php, acrescentando o método novo após o comando mostraObj() e para poder ver o resultado, vamos invocar o método dentro um var_dump(), como a seguir: var_dump($foto->verTamanhoImg()).
Resultado do código acima:
Note que o atributo NOVO NOME DA IMAGEM, agora tem um valor atribuído.
Este método irá extrair a altura e largura do arquivo de imagem. O valor extraído será expresso em pixel. A função getimagesize() é usada para obter o tamanho de uma imagem. Esta função aceita o nome do arquivo como parâmetro e retorna as dimensões altura / largura da imagem em forma de Array. Esta função tem mais recursos, porém aqui iremos utilizar somente a parte que retorna as dimensões.
Exceções desta função | |
---|---|
getimagesize() retorna zero | Para largura e altura se os formatos não contiverem imagem ou várias imagens. |
getimagesize() irá gerar um erro de nível E_WARNING | Se o acesso à imagem do nome do arquivo for impossível. |
getimagesize() irá gerar um erro de nível E_NOTICE | Se houver algum erro na leitura. |
Para testar este método vamos utilizar o mesmo arquivo do nosso formulário sobeimagem.php,
antes de testar este código, vamos eliminar as duas linhas de comando var_dump(), apenas para limpar um pouco o código, já que estamos em fase de testes.
Acrescente o método novo antes do comando mostraObj().
Resultado do código acima:
Note que os atributos LARGURA(PX) e ALTURA(PX), agora tem um valor atribuído.
Estes métodos irão comparar se a largura e altura da imagem estão dentro das dimensões permitidas. Se a largura ou altura estiver acima do permitido cada método irá atribuir um valor TRUE a variável $achouerro, caso contrário irá atribuir um valor FALSE. Em seguida irá retornar a variável $achouerro.
Para testar estes métodos vamos utilizar o mesmo arquivo do nosso formulário sobeimagem.php, acrescentando os dois métodos novos após o comando mostraObj() e para poder ver o resultado, vamos invocar o método dentro um var_dump(), como a seguir: var_dump($foto->verLarguraImg()) e var_dump($foto->verAlturaImg()).
Resultado do código acima:
Este método irá retornar um ou vários erros armazenados no atributo erro que é do tipo array.
Este método irá verificar se a imagem que será enviada ao servidor está dentro dos parâmetros permitidos. Caso exista alguma inconsistência será gerado um erro que será armazenado no atributo erro[].
Este método irá invocar os métodos pegaExtensao(), pegaDimensao(), validaExtensao(), verTamanhoImg(), verLarguraImg(), verAlturaImg(), renomeiaImagem().
Para testar este método vamos utilizar o mesmo arquivo do nosso formulário sobeimagem.php, acrescentando o método novo após o comando iniciaObj() e para poder ver o resultado, vamos invocar o método dentro um var_dump(), como a seguir: var_dump($foto->preparaImg()) .
Resultado do código acima: