Skip to content

Instantly share code, notes, and snippets.

@manfe
Created August 25, 2020 22:23
Show Gist options
  • Save manfe/4a3c4bdb9a799a6afe436468b53d6755 to your computer and use it in GitHub Desktop.
Save manfe/4a3c4bdb9a799a6afe436468b53d6755 to your computer and use it in GitHub Desktop.
Upload de Imagem com PHP
<?php
class ImageUpload {
public $pasta_alvo;
public $nome;
public $imagem;
public $extensoes_habilitadas;
private $extensao;
private $status;
private $errors;
public function upload() {
$this->verify();
if ($this->errors) {
return $this->errors;
}
$arquivo_uri = $this->clean($this->nome);
return move_uploaded_file($this->imagem["tmp_name"], $_SERVER['DOCUMENT_ROOT'] . $arquivo_uri);
}
private function clean($string) {
$sem_espacos = strtolower(str_replace(' ', '-', $string)); // substitui todos os espaços por hífen.
$string_ok = preg_replace('/[^A-Za-z0-9\-]/', '', $sem_espacos); // remove caracteres especiais (çáé$#).
$timestamp = date_timestamp_get(date_create()); // captura em segundos a data atual
$nome_correto = $this->pasta_alvo . $timestamp . '-' .$string_ok . '.' . $this->extensao;
return $nome_correto;
}
public function verify() {
$this->extensao = strtolower(pathinfo($this->imagem["name"], PATHINFO_EXTENSION));
if(in_array($this->extensao, $this->extensoes_habilitadas) === false){
$this->errors[]= "Extensão não permitida, escolha entre: " . implode(", ", $this->extensoes_habilitadas);
return;
}
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$type = finfo_file($finfo, $this->imagem["tmp_name"]);
if (isset($type) && !in_array($type, array("image/png", "image/jpeg", "image/gif"))) {
$this->errors[] = "O arquivo enviado não é um arquivo de imagem válido.";
return;
}
}
}
?>
<?php
/* UTILIZAÇÂO */
$imageUpload = new ImageUpload();
$imageUpload->pasta_alvo = "/img/produtos/";
$imageUpload->nome = "nomedoarquivo"; // nome que quer colocar na imagem.
$imageUpload->imagem = $_FILES['imagem']; // direto do form html
$imageUpload->extensoes_habilitadas = array("jpeg", "jpg", "png");
$return = $imageUpload->upload();
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment