Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Editar uma imagem - excluir a imagem antiga no diretório

Quando for editar uma imagem se você trocar de imagem a imagem antiga ainda ficaria salva no seu diretório escolhido por você. Não teria um jeito de excluir essa imagem antiga?

public function processaRequisicao(): void {

            $id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
            if ($id === false || $id === null) {
                header("Location: /?sucesso=0");
                exit();
            }

            $url = filter_input(INPUT_POST, 'url', FILTER_VALIDATE_URL);
            if ($url === false) {
                header("Location: /?sucesso=0");
                exit();
            }
            
            $titulo = filter_input(INPUT_POST, 'titulo');
            if ($titulo === false) {
                header("Location: /?sucesso=0");
                exit();
            }

            $video = new Video($url, $titulo);
            $video->setId($id);

            if ($_FILES['image']['error'] === UPLOAD_ERR_OK) {
                move_uploaded_file($_FILES['image']['tmp_name'], __DIR__ . "/../../public/img/uploads" . $_FILES['image']['name']);
                $video->setFilePath($_FILES['image']['name']);
            }

            $success = $this->videoRepository->update($video);

            if ($success === false){
                header("Location: /?sucesso=0");
            } else {
                header("Location: /?sucesso=1");
            }
        }
2 respostas
solução!

Olá, Renan.

Tudo bem?

Para isso, no PHP, você pode tentar usar a função unlink() para excluir um arquivo. No seu caso, você pode excluir a imagem antiga antes de mover a nova imagem para o diretório.

No entanto, antes de excluir a imagem antiga, você precisa ter certeza de que a nova imagem foi enviada corretamente e que não houve nenhum erro durante o processo de upload. Aqui está um exemplo de como você pode fazer isso:

if ($_FILES['image']['error'] === UPLOAD_ERR_OK) {
    // Caminho da imagem antiga
    $oldImagePath = __DIR__ . "/../../public/img/uploads" . $video->getFilePath();

    // Verifica se a imagem antiga existe
    if (file_exists($oldImagePath)) {
        // Exclui a imagem antiga
        unlink($oldImagePath);
    }

    // Move a nova imagem para o diretório
    move_uploaded_file($_FILES['image']['tmp_name'], __DIR__ . "/../../public/img/uploads" . $_FILES['image']['name']);

    // Define o caminho da nova imagem
    $video->setFilePath($_FILES['image']['name']);
}

Esse código verifica se a imagem antiga existe antes de tentar excluí-la, o que é uma boa prática para evitar erros. Lembre-se de que a função unlink() retorna true em caso de sucesso e false em caso de falha. Você pode querer adicionar algum controle de erro para lidar com qualquer falha ao excluir a imagem.

Espero ter entendido e conseguido ajudar. Qualquer coisa manda aqui de novo. Bons estudos!

Obrigado Renan.