[Resolvido] Como apagar arquivo já existente com PHP sem saber a extensão
Bem criei essa classe de upload de imagem para os avateres de usuários de um site que estou fazendo.
Está aqui a classe:
Spoiler
<?php
class avatarUpload {
// Atributos do Arquivo enviado
private $file;
private $name;
private $size;
// Atributos para a imagem convertida
private $image;
private $finalName;
private $newImage;
// Atributo da pasta de armazenamento
private $folder;
// Atributos dos Resultados obtidos
private $result;
/** ***************************************************************
* @Method: Construtor da classe
* Se não informar um diretório ou se não existir cria um
* por padrão.
** ***************************************************************/
function __construct($uploadDir = null) {
$this->folder = ((string) $uploadDir ? $uploadDir : './upload/');
if (!file_exists($this->folder) && !is_dir($this->folder)) {
mkdir($this->folder, 0777);
}
}
/** ***************************************************************
* @Method: Obtem os dados pelos parâmetros
* * Informe uma arquivo por Global $_FILE e o nome para o arquivo
** ***************************************************************/
public function sendImage(array $file, $filename) {
$this->file = $file;
$this->name = (string) $filename;
$this->size = 250;
$this->getImageType();
}
/** ***************************************************************
* @Method: Retorna o resultado verdadeiro caso tenha sucesso
* no upload do arquivo.
** ***************************************************************/
public function setResult() {
return $this->result;
}
/** ***************************************************************
* @Method: Obtem o tipo de imagem.
* @return (bool) Se não for imagem jpg.. ou png... restorna falso
* se true executa o próximo método.
** ***************************************************************/
private function getImageType() {
switch ($this->file['type']) {
case 'image/jpg':
case 'image/jpeg':
case 'image/pjpeg':
$this->image = imagecreatefromjpeg($this->file['tmp_name']);
break;
case 'image/png':
case 'image/x-png':
$this->image = imagecreatefrompng($this->file['tmp_name']);
break;
}
if (!$this->image) {
@imagedestroy($this->image);
$this->result = false;
} else {
$this->setImageResize();
}
}
/** ***************************************************************
* @Method: Redimenciona a imagem caso ela seja maior que o
* permitido.
** ***************************************************************/
private function setImageResize() {
$x = imagesx($this->image);
$y = imagesy($this->image);
$imageX = ( $this->size < $x ? $this->size : $x );
$imageY = ($imageX * $y) / $x;
$this->newImage = imagecreatetruecolor($imageX, $imageY);
imagealphablending($this->newImage, false);
imagesavealpha($this->newImage, true);
imagecopyresampled($this->newImage, $this->image, 0, 0, 0, 0, $imageX, $imageY, $x, $y);
$this->finalName = strtolower($this->name . strrchr($this->file['name'], '.'));
$this->createNewImage();
}
/** ***************************************************************
* @Method: Cria a nova imagem já tratada na pasta de envio
* permitido.
* @return (bool) Se houver problemas durante o processo de
* armazenamento remoto, retorna um resultado falso e não salva a
* imagem.
** ***************************************************************/
private function createNewImage() {
switch ($this->file['type']) {
case 'image/jpg':
case 'image/jpeg':
case 'image/pjpeg':
imagejpeg($this->newImage, $this->folder . $this->finalName);
break;
case 'image/png':
case 'image/x-png':
imagepng($this->newImage, $this->folder . $this->finalName);
break;
}
imagedestroy($this->image);
imagedestroy($this->newImage);
if (!$this->newImage) {
$this->result = false;
} else {
$this->result = true;
}
}
}
Até aí tudo bem, acontece o seguinte com o passar do tempo muitas imagens estarão hospedadas no diretório, a intenção é, toda vez que um usuário upar uma nova imagem a anterior é deletada, justamente porque tratei de colocar o nome da imagem passando por parâmetro o id da conta que estiver cadastrada, assim sendo somente terei 1 imagem com o número do ID da conta.
No que até aqui tudo bem 100% funcional como queria, mas acontece que na classe permito o upload de imagem do tipo PNG e JPG assim sendo se um usuário upar uma imagem em um formato e depois em outra terei 2 imagens com o mesmo nome, mas com a extensão diferente.
Enfim alguma sugestão de como prever que isso aconteça, sendo somente ser possível ter 1 única imagem no diretório independente da extensão.
Obs.: Fiz alguns testes usando "unlink", mas não obtive sucesso.
No mais acho que o procedimento seria apagar a anterior, porém não sei como proceder.Discussão (3)
Carregando comentários...