PHP - problem with Unlink

2

Dear friends.

I have the following problem that I can not solve. I created a routine to change images using the UNLINK function, but I can not.

Change only the Data except the images, even putting the correct folder path, below I 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");
}
    
asked by anonymous 12.04.2015 / 17:52

2 answers

1

As I understand it, unless you upload an image with the same name as it already exists on the server, the images will never be "changed", since the name will be different, they will coexist in the folder. >

That said, 1st check if you have permission to write in this folder, if you do not have write permission (777) you will not be able to save the new image or erase the old one. 2nd reverse the order of things. First erase the old image ( unlink ) or rename it, and then save the new image ( move_uploaded_file ). Finally, check if the new file does not really have the same name as before before updating the name in the database, 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 little process, you'll be able to decide whether to remove the existing image, whether to rename it or something.

    
25.04.2015 / 05:52
0

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

if (file_exists("../../img/portifolio/{$excluir_img}")) {
    unlink("../../img/portifolio/{$excluir_img}");
}
    
31.08.2015 / 20:43