PHP - problem with Unlink

Asked

Viewed 432 times

2

Dear friends.

I have the following problem that I’m having trouble solving. I created a routine to Change Images using the UNLINK Function, but I’m not getting it.

Just change the Data minus the images, even putting the correct folder path, below posted my source code:

// Carrega as funções e exteções
include("../funcao/funcao_atualizar.php");
include("../funcao/funcao_select2.php");
include("../../extensoes/url_amigavel.php");

// Resgata os valores do formulário
$titulo = utf8_decode($_REQUEST['titulo']);
$url=  url_amigavel($titulo);
$resumo= utf8_decode($_REQUEST['resumo']);
$conteudo= utf8_decode($_REQUEST['conteudo']);
$data= $_REQUEST['data'];
$id= $_REQUEST['id'];

// Verifica se o campo Imagem foi selecionado
if($_FILES['img']['name'] == false){

    //Caso negativo, atualiza os dados sem atualizar o campo img_destaque
    atualizar(array("titulo","url","resumo","conteudo","data"),
              array($titulo,$url,$resumo,$conteudo,$data),"portifolio","Where id = $id");

    // Retorna a página Portifólio com a informação de atualização
    header("location: ../portifolio.php?info=ok");

} else {
    // Se o campo img retornar valor ele faz o upload da imagem.

    // Cria uma matriz com as definições da pasta, tamanho, extensões que a imagem deve conter. 
    // Também habilita e desabilita a renomiação do arquivo da imagem
    $_UP['pasta'] = '../../img/portifolio/';

    $_UP['tamanho'] = 1024 * 1024 * 2; // 2Mb

    $_UP['extensoes'] = array('jpg', 'png', 'gif');

    $_UP['renomeia'] = true;

    // Verifica se as extenção do arquivo é permitida
    $extensao = strtolower(end(explode('.', $_FILES['img']['name'])));
    if (array_search($extensao, $_UP['extensoes']) === false) {
        header("location: ../editar_portifolio.php?info=erro-extesao");
        exit;
    }

    // Verifica se o tamanho é inferior ao relacionado na Matriz $_UP
    else if ($_UP['tamanho'] < $_FILES['img']['size']) {
    header("location:../editar_portifolio.php?info=erro-tamanho");
    exit;
    }

    // Caso imagem esteja com tamanho adequado e extensão permitida, realiza a troca do nome E O UPLOAD
    else {

        if ($_UP['renomeia'] == true) {

        $nome_final = time().'.jpg';
        } else {

        $nome_final = $_FILES['img']['name'];
        }

        if (move_uploaded_file($_FILES['img']['tmp_name'], $_UP['pasta'] . $nome_final)) {

        } else {

        header("location: ../editar_portifolio.php?info=erro-img");
        exit;
        }

    }

    //Depois do upload ele faz uma consulta para selecionar o campo img_detaque para excluir a imagem antiga
    $consulta= select("portifolio","img_destaque","Where id = $id");

    // Verifica se consegue encontrar o campo
     if($consulta == true){
            // Caso positivo monta a matriz e resgata o resultado
            for($i=0; $i<count($consulta); $i++){
                $excluir_img = $consulta[$i]['img_destaque'];
            }

            // Exclui a Imagem ANTIGA do diretório - aqui está o erro
            // não acha a pasta e não altera no Banco.
            unlink("../../img/portifolio/$excluir_img");
    }

    //Faz a atualização dos campos e da incluse do nome da imagem no banco de dados
    atualizar(array("titulo","url","resumo","conteudo","data","img_destaque"),
          array($titulo,$url,$resumo,$conteudo,$data,$nome_final),"portifolio","Where id = $id");

    // Retorna a página Portifólio com a informação de atualização
    header("location:../portifolio.php?info=ok");
}
  • 1

    Error appears?

  • If the images have the same name as the old ones, it can be the browser cache that is showing the old image, so it "seems" that the photos do not change.

  • Dear friend, no error appears, simply does not change the Image in the Destination Folder or saved in the Database. How can I solve this problem? Where should I make the change? Thank you.

2 answers

1

From what I understand, unless you upload an image with the same name as the one already on the server, the images will never be "changed", since the name will be different, coexist in the folder.

Having said that, 1º check if you have write permission in this folder 'portifolio', if you do not have write permission (777) it will not be possible to save the new image or delete the old one. 2º invert the order of things. First delete the old image (unlink) or rename it, and only then save the new image (move_uploaded_file). 3º finally, check that the new file does not really have the same name as the previous one before updating the name in the bank, if it is the same you skip this step, since nothing will change.

Example

<?php
$directorio = "../imagens/";
$produto = array("titulo"=>"ABC", "preco"=>100, "descricao"=>"A...Z", "imagem"=>"ABC.jpg");
$produto_nome = $directorio . basename($produto["imagem"]);
        if(file_exists($produto_nome)){
            chmod("$produto_nome", 0755);    
        }
// Outras ações
?>

After this small process, you will be able to decide whether to remove the existing image, rename it or something like that.

0

Probably the file has been deleted and the system is trying to re-exclude a file that no longer exists, generating an error, try doing this:

if (file_exists("../../img/portifolio/{$excluir_img}")) {
    unlink("../../img/portifolio/{$excluir_img}");
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.